c - 函数insertionSort不对数组进行排序

标签 c

这是我的代码。调用函数insertionSort后,当我打印数组时,它会打印数组而不对其进行排序。

我无法理解问题是出在排序算法还是其他问题。代码编译得很好并且运行也很好,因此排除了任何语法错误的可能性。

#include<stdio.h>

void insertionSort(int arr[], int n);

int main(){
  int n, i;
  printf("Enter n: ");
  scanf("%d\n", &n);
  int arr[n];
  for(i=0; i<n; i++){
    scanf("%d", &arr[i]);
  }

  insertionSort(arr, n);

  for(i=0; i<n; i++){
    printf("%d\n", arr[i]);
  }

}

void insertionSort(int arr[], int n){
  int i,j, key;
  for(j=1; j<n; j++){
    key = arr[j];
    i = j-1;
    while (i>0 && arr[i] > key) {
      arr[i+1] = arr[i];
      arr[i] = key;
      i--;
    }
  }
}

最佳答案

您忘记将 arr[0] 添加到要插入的候选项中。

尝试使用 while (i>=0 && arr[i] > key) 而不是 while (i>0 && arr[i] > key)循环。

关于c - 函数insertionSort不对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37643834/

相关文章:

c - 带大括号的一维和二维数组初始化

c++ - 有人能解释一下为什么下面的代码中的总数=7吗?与 static int sum ?

c - 如何在GDB模式下传递输入数据进行编程 C. 已传递参数并运行程序

c++ - 嵌套包含语句,便于 c/c++ 编程

c - 神经网络反向传播问题

c - 交叉编译器在哪里寻找库?

c - 如何用 C 语言为 PIC24 编写与硬件无关的函数

自 Windows 10 1809 以来,通过 USB HID 设备创建文件失败并出现访问被拒绝 (5)

c - How to convert <node/> to <node></node> with libxml (converting empty elements to start-end tag pair)

c - 当我从信号处理程序调用非异步安全函数时,它总是不安全吗?