插入排序不打印 C 中的所有值

Insertion sort not printing all values in C

插入排序不起作用,它只打印一些值。有谁知道我可以做些什么来修复它?

void insertion(int Array[], int n) {
   for (int i = 1; i < n; i++) {
      int j = i;
      while (j >= 0 && Array[j] < Array[j - 1]) {
         int temp = Array[j];
         Array[j] = Array[j - 1];
         Array[j - 1] = temp;
         j--;
      }
   }
}

内部循环中的测试不正确:当 j == 0 您读取并可能修改偏移量 -1 处的元素时,它具有 未定义的行为 ,可能导致输出不正确,但由于您没有 post 输出代码,因此可能还有其他问题。

这是修改后的版本:

void insertion(int Array[], int n) {
    for (int i = 1; i < n; i++) {
        for (int j = i; j > 0 && Array[j] < Array[j - 1]; j--) {
            int temp = Array[j];
            Array[j] = Array[j - 1];
            Array[j - 1] = temp;
        }
    }
}

插入排序:想法  类似于大多数人排列一手扑克牌的方式 从手中的一张牌开始 选择下一张卡片并将其插入正确的排序顺序 对所有卡片重复上一步