关于一个插入算法的问题

zaixiankaifa 2014-08-30 07:28:40
#include <stdio.h>

void insertsort(int k[],int n)
{
int i,j;
int tmp;
for(i=2;i<=n;i++)
{
tmp=k[i];
j=i-1;
while(j>0 && tmp<k[j])
{
k[j+1]=k[j--];
}
k[j+1]=tmp;
}
}

int main()
{
int test[7]={3,6,4,2,11,10,6};
insertsort(test,6);
for(int i=0;i<7;i++)
{
printf("%d\n",test[i]);
}
return 0;
}


编译的时候提示:
test.c:14:14: warning: unsequenced modification and access to 'j'
[-Wunsequenced]
k[j+1]=k[j--];
~ ^
1 warning generated.
使用应该写成:
k[j+1]=k[j];
j--;
比较妥当呢?

另外在运行的时候,排序结果不是预想的从小到大的排序结果,而是:3,0,4,2,6,10,6.
应该怎么改才是正确的呢,麻烦各位指点。
...全文
213 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chuwanchang 2014-08-31
  • 打赏
  • 举报
回复
C语言的基本语法要先搞会。这个算法不算难,再好好调试一下,尽量先不看别人的代码。
哈哈gogo 2014-08-31
  • 打赏
  • 举报
回复
顶楼上一个吧,,,,
赵4老师 2014-08-30
  • 打赏
  • 举报
回复
“多一少一”问题占程序员常犯错误的10%以上! 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断,搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个? <、<=、==、>、>=中的哪个?
熊熊大叔 2014-08-30
  • 打赏
  • 举报
回复
1. k[j+1]=k[j--]; 的各步骤顺序和执行结果在c标准中是未定义的,各编译器实现可能不一样。你使用某个编译器结果可能正确,但换一个编译器可能就错了。换成后面的写法结果是确定的。 2. c的数组下标是从0开始的,你的写法都是从1开始的 for (i = 1; i < n; i++) while ( j >= 0 ... insertsort(test,7);
707wk 2014-08-30
  • 打赏
  • 举报
回复
仅供参考里面貌似有插入排序 http://pan.baidu.com/s/17yIcQ 突然发现我这代码好万能。。。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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