设为首页 加入收藏

TOP

C语言精简快排代码,带注释
2014-11-23 23:21:06 来源: 作者: 【 】 浏览:2
Tags:语言 精简 代码 注释

好久不写博,今天又学快排,想想自己也只是知道思想,不曾真正写过。找了个ACM题练手Hdu1106,主要是ACM的有数据,方便知道自己的对不对。
写的时间虽然久了点,但是弄出来了,还是有成就感的,没看书什么的,只凭指导思想自己思考的那种方式写的,比较喜欢这种Coding的方式。好了,废话少说,上菜。
/**
@r:要排序的数组
@s:排的起点,从0开始
@e:排的终点,从n-1开始
*/
void quicksort(int r[1001],int s,int e)
{
int t = r[s];//哨兵,为开头的那个
int f = s+1;
int b = e;//f为前向指针,从s+1开始,b为反向指针,从e开始
int m = 0;
if(s>=e)return;//退出条件

while(f<=b)
{
while(f<=b&&r[f]<=t) f++;//在前面找比哨兵大的元素
while(f<=b&&r[b]>=t) b--;//在后面找比哨兵小的元素
//交换这两个元素
if(f m = r[f];
r[f] = r[b];
r[b] = m;
f++; b--;
}
}
//交换哨兵和r[b],r[b]肯定要比哨兵小
r[s] = r[b];
r[b] = t;
//排两边的
quicksort(r,s,b-1);
quicksort(r,b+1,e);
}
注意有重复键的这种情况,比如要排的数据是1,1,1,1。这个bug调了好久。
写的时候,最好在纸上画画,结合调试(我有点太依赖调试了,所以费时间),最佳实践啦~~
作者“青禾”

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇二叉树代码练习 下一篇形参,实参,按值,按引用,按指针

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: