【发布时间】:2017-10-19 20:24:03
【问题描述】:
我在执行程序时得到了错误的输出,我不知道是什么原因造成的。
正如您在下面看到的,我有一个数组。但是,在执行程序时,我得到了输出:
array[0]=3
array[1]=1
array[2]=1
array[3]=5
array[4]=5
array[5]=8
显然,这不是我的预期输出,即 {1,3,4,5,7,8}。我做错了什么?
#include <stdio.h>
#include <stdlib.h>
#define l 6
void isnertionSort(int array[]);
int main(void)
{
int array[l]={3,4,1,7,5,8};
for(int i=0; i<l;i++) {
printf("array[%d]=%d\n", i, array[i]);
}
printf("\n");
isnertionSort(array);
for(int i=0; i<l; i++){
printf("array[%d]=%d\n", i, array[i]);
}
return 0;
}
void isnertionSort(int array[])
{
int j,key;
for(int i =1;i<l;i++){
key = array[i];
j = i -1;
while(j>0 && array[j]>key){
array[j+1]=array[i];
j--;//j=j-1
}
array[j+1]= key;
}
}
【问题讨论】:
-
请学习如何调试程序(例如How to debug small programs)。您应该学习如何使用调试器逐步完成,和/或添加打印语句来识别出了什么问题。在 SO 上,您应该提供一些示例输入数据以及预期和实际输出(了解如何创建 MCVE — minimal reproducible example)。
-
移动时似乎覆盖了数组中的元素。调试器是识别此类问题的绝佳工具。
-
如果问题已解决,请接受答案并收紧问题。您已经收到类似的advice。见What does it mean when an answer is "accepted"?
-
请注意,使用宏
l(小写字母 L)通常不是一个好主意。尽管拼写错误是一致的,但isnertion通常拼写为insertion。
标签: c arrays sorting insertion-sort