这是我的代码。调用函数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/