函数insertionSort不对数组

时间:2016-06-05 15:52:21

标签: 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--;
    }
  }
}

1 个答案:

答案 0 :(得分:2)

您忘记将arr[0]包含在要插入的候选人中。

尝试使用while (i>=0 && arr[i] > key)代替while (i>0 && arr[i] > key)进行循环。