大家看看这个直接插入排序有什么问题

corder_li 2007-08-14 06:02:56
直接插入算法。有问题,希望高人改之
#include "stdafx.h"
#include "stdio.h"
void sort(int A[])
{
int j;
int X;
for(int i=2;i<10;i++)
{
A[0] = A[i];j=i-1;
while(A[0]<A[j])
{
A[j+1] = A[j];
j=j-1;
}
A[j+1]=A[0];
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int A[10] = {6,2,4,1,9,3,5,8,7,10};
sort(A);
for(int i=0;i<10;++i)
{
printf("%d ",A[i]);
}
//系统
system("PAUSE");
return 0;
}
...全文
117 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ShaoKao 2007-08-14
  • 打赏
  • 举报
回复
void insert_sort(int a[], int len) {
int temp;
int k;
for (int i = 1; i < len; i++) {
temp = a[i];
k = i - 1;
while(a[k] > temp && k >= 0) {
a[k+1] = a[k];
k--;
}
a[k+1] = temp;
}
}
trueytht 2007-08-14
  • 打赏
  • 举报
回复
没有实质错误,
1) 多了一个未使用的 int X;
2) int A[10] = {6,2,4,1,9,3,5,8,7,10};
这个有错误,你已经把A[0]作为sentinel了,那就不应该污染A[0].
也就是说,如果你的想给10个数排序,那就需要申请11个空间,int A[11] = {0, ...data....};
你10,所以只能给9个数排序.

应该这样:
int _tmain(int argc, _TCHAR* argv[])
{
int A[10] = {0,6,2,4,1,9,3,5,8,7}; // modified
sort(A);
for(int i=1;i<10;++i) // modified
{
printf("%d ",A[i]);
}
//系统
system("PAUSE");

return 0;
}


kei_lin 2007-08-14
  • 打赏
  • 举报
回复
A[j+1] = A[j];
有问题...

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧