插入排序错误

问题描述 投票:0回答:2

我需要帮助了解我的错误。我试图使插入排序,但它不工作。

void insertionSort(int A[]) {
    int temp, j, d;

    for (int i = 1; i <= dim - 1; i++) {
        j = i;
        while (d > 0 && A[d-1] > A[d]) {
            temp = A[j];
            A[j] = A[j - 1];
            A[j - 1] = temp;
        }
    }
}
c insertion-sort
2个回答
0
投票

d将不会被初始化,所以它具有垃圾值。我想你一定要试试以下

for (int i = 1; i <dim; i++) {
    j = i - 1;
    d = A[i];
    while(j>=0 && A[j-1] > d){ 

       /* other code */
       j = j-1;

    }
    A[j+1] = d;

}

0
投票

我觉得你有一些问题如下:

  1. dj更换
  2. 函数原型应该是void insertionSort(int A[], int dim)
  3. 用于插入的逻辑是不正确的。

所以这里是一个基于源代码修改我:

void insertionSort(int A[], int dim)
{
    int temp, j;
    for (int i = 1; i < dim; i++) {
        temp = A[i];
        j = i;
        while (j > 0 && A[j - 1] > temp) {
            A[j] = A[j - 1];
            j--;
        }
        A[j] = temp;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.