我正在进行交流插入排序,它工作正常,但排序后第一个数字总是一个奇怪的负数,程序错误。
#include #include #include void insertionSort(int list[], int last){ int hold; int walker; int current; int count; count = 0; for (current = 1; current = 0 && hold < list[walker]; walker--){ list[walker + 1] = list[walker]; } list [walker + 1] = hold; count++; } printf("nnHow many passes to sort?n%dnn", count); return; } int main(int argc, char *argv[]) { int numbers[100]; int i; srand(time(NULL)); for (i = 0; i < 100; i++){ numbers[i] = rand() % 100; } printf("Unsorted Numbersn-------- -------n"); for (i = 0; i < 100; i++){ printf("%d,", numbers[i]); } insertionSort(numbers, 100); printf("nSorted Numbersn-------- -------n"); for (i = 0; i < 100; i++){ printf("%d,", numbers[i]); } system("PAUSE"); return 0; }
你将在循环中超过数组大小。 当current = last时,list [last]是list [100],数组的第101个元素……这也不好。
编辑。 我刚刚测试了它,它对我有用。 我唯一改变的是外部循环中的<=到n <
void insertionSort(int list[], int last){ int hold; int walker; int current; int count; count = 0; for (current = 1; current < last; current++){ hold = list[current]; for (walker = current - 1; walker >= 0 && hold < list[walker]; walker--){ list[walker + 1] = list[walker]; } list [walker + 1] = hold; count++; } printf("nnHow many passes to sort?n%dnn", count); return; }
如果你声明一个像这样的数组
int numbers[100]
数字[99]是最后一个元素。 在排序function中,您也可以访问数字[100] 。
以上就是c/c++开发分享c插入排序错误相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/519454.html