我的插入实现排序是否正确?

时间:2017-02-04 18:35:42

标签: c insertion-sort cs50

这是我关于堆栈溢出的第一个问题。我刚刚通过CS50开始了编程世界的旅程。我在C中插入排序的代码与教师的伪代码建议的稍有不同。我只是想知道下面的代码是否正确,我怎样才能让它变得更好?非常感谢。

int arr[6] = {23, 42, 4, 16, 8, 15};

for (int i = 1; i < 6; i++)          // Iterating over the unsorted portion of array.
{
    int element = arr[i];           // This is the first element of the unsorted portion.
    int temp = -1;
    for(int j = i-1; j >= 0 && element < arr[j]; j--)   // Iterating over the unsorted portion of array from right to left.
    {
        arr[j+1] = arr[j];
        temp = j;
    }

    if(temp != -1)                 // If temp does not change, the element is already sorted.
    {
        arr[temp] = element;
    }
}

1 个答案:

答案 0 :(得分:2)

恭喜,您的代码确实有效。

第一种看待这种情况的方法是将此代码放在一个函数中,如main(),并在运行算法后按顺序打印每个元素。如果结果不符合您的预期,那么它肯定不起作用,但事实并非如此。但是,如果您通过第一次尝试,则应该开始针对其他情况测试您的代码,尤其是极端情况。

另一个有用的选择是使用GDB,这是一个调试器,可以在代码所采用的每一步显示整个数组,特别是在CS50 IDE上实现的那个,实际上非常讨人喜欢。

此外,challenges上的HackerRank insertion sort可能会帮助您了解这一点。除此之外,祝你好运,希望你喜欢!