请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();
} 展开
错在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();
} 展开
2个回答
展开全部
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]);
}
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;
}
}
{
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询