这是我关于堆栈溢出的第一个问题。我刚刚通过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;
}
}
答案 0 :(得分:2)
恭喜,您的代码确实有效。
第一种看待这种情况的方法是将此代码放在一个函数中,如main()
,并在运行算法后按顺序打印每个元素。如果结果不符合您的预期,那么它肯定不起作用,但事实并非如此。但是,如果您通过第一次尝试,则应该开始针对其他情况测试您的代码,尤其是极端情况。
另一个有用的选择是使用GDB,这是一个调试器,可以在代码所采用的每一步显示整个数组,特别是在CS50 IDE上实现的那个,实际上非常讨人喜欢。
此外,challenges上的HackerRank insertion sort可能会帮助您了解这一点。除此之外,祝你好运,希望你喜欢!