这是我的代码。在调用函数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--;
}
}
}
答案 0 :(得分:2)
您忘记将arr[0]
包含在要插入的候选人中。
尝试使用while (i>=0 && arr[i] > key)
代替while (i>0 && arr[i] > key)
进行循环。