请C语言高手帮忙改错!!

这是一个直接插入排序算法的例题,很明显的错了.但我自己又不知道怎么把它改正,请高手指教!!!!错在insertSort()函数,另外我不知道那个data[0]干什么用的,... 这是一个直接插入排序算法的例题,很明显的错了.但我自己又不知道怎么把它改正,请高手指教!!!!
错在insertSort()函数,另外我不知道那个data[0]干什么用的,最好能给出个能运行成功的直接插入排序算法(带上注解).
#include "stdio.h"
void insertSort(int data[],int n)
{
int i,j;
for(i=2;i<=n;i++)
{
if(data[i]<data[i-1])
{
data[0]=data[i];
data[i]=data[i-1];
for(j=i-2;data[j]>data[0];j--)
data[j+1]=data[j];
data[j+1]=data[0];
}
}
}
void main()
{
int a[7]={13,8,7,6,5,3,1};
int i;
insertSort(a,7);

for(i=0;i<7;i++) /*输出排序后的结果*/
{
printf("%4d",a[i]);
}
getchar();
}
展开
 我来答
roger0wang
2008-10-06
知道答主
回答量:6
采纳率:0%
帮助的人:0
展开全部
c语言中数组的下标是从0开始计数的,所以data[0]表示数组的第一个元素。直接插入排序算法的思想是:先把第一个元素当做已排序序列,取出下一个元素,在已经排序的元素序列中从后向前扫描,将大于该新元素的已排序元素依次向后移动一个位置,然后把新元素放入空出的位置上。

getchar()函数是从终端输入一个字符。
#include "stdio.h"
void insertSort(int data[],int n)
{
int i,j;
int temp; //中间变量 用于暂时存储未排序的新元素
for(i=1;i<n;i++)
{
temp=data[i]; //将未排序新元素赋值给temp
for(j=i;temp<data[j-1] && j>0;j--) //移位,循环结束时,下表j处为空位处
{
data[j]=data[j-1];
}
data[j]=temp;

}
}
void main()
{
int a[7]={13,8,7,6,5,3,1};
int i;

insertSort(a,7);

for(i=0;i<7;i++) /*输出排序后的结果*/

printf("%4d",a[i]);

}

参考资料: 谭浩强著.C程序设计(第三版). 北京:清华大学出版社

匿名用户
2008-10-06
展开全部
void InsertSort(char array[],unsigned int n)
{
int i,j;
int temp;
for(i=1;i<n;i++)
{
temp = array[i];//store the original sorted array in temp
for(j=i ; j>0 && temp < array[j-1] ; j--)//compare the new array with temp
{
array[j]=array[j-1];//all larger elements are moved one pot to the right
}
array[j]=temp;
}
}

参考资料: http://wiki.cprogram.cn/index.php/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式