我通过理解插入排序算法编写了这段代码。我的老师说它是冒泡排序,但我的 friend 说它是插入。有人可以检查一下并向我简要介绍一下。

#include <stdio.h>
void sort(int n) {
  int i, j;
  float arr[n], k;
  for (i = 0; i <= n - 1; i++) {
    printf("Enter the number");
    scanf("%f", &arr[i]);
  }

  for (i = 1; i <= n - 1; i++) {
    j=i
    while (arr[j] < arr[j - 1] && j > 0) {
      k = arr[j - 1];
      arr[j - 1] = arr[j];
      arr[j] = k;
      /*printf("\n\t%f",arr[j]);*/
      j--;
      /*printf("\n%d",j);*/
    }
    /*printf("\n%d",x[i]);*/
  }
  for (i = 0; i < n; i++) {
    printf("\n%f", arr[i]);
  }
}

int main() {
  int t;
  printf("Enter the number of values to be sorted");
  scanf("%d", &t);
  sort(t);
}

最佳答案

对我来说似乎两者都不是。它可能是插入排序,因为您总是将数组未排序部分中的第一个元素放入数组排序部分中的正确位置。但是,插入不是通过将所有必需元素向右移动 1 个元素然后将所选元素插入到正确位置来完成的(我会说,标准插入排序确实如此),而是将所选元素与左侧 1 个元素交换,直到被选元素在正确的地方。

由于数组的“排序”和“未排序”部分,我会说插入排序。

由于交换相邻元素,我会说冒泡排序。

但是,对我来说似乎更像是插入排序。如果不是(低效)交换,您只会将左元素向右移动,并且最后才将所选元素向左写入(最终,所选元素的正确位置),这将是一个不错的插入排序

关于c - 这是 C 中的冒泡排序还是插入排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45711458/

10-11 23:03
查看更多