搜索
查看: 2271|回复: 1
打印 上一主题 下一主题

[原创] 快速排序(C语言)

[复制链接]
跳转到指定楼层
楼主
发表于 2012-10-30 20:39:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>

int cmp(const void* x,const void *y)
{
    if( (*(int *)x) < (*(int *)y) )
       return 1;
    else
       return -1;
}

int main()
{
        int a[100]={0,2,4,3,1,5,6,7};
        int i;
        qsort(&a[1],7,sizeof(a[0]),cmp);
   
    for(i=1;i<=7;i++)
      printf("%d ",a[i]);
   
        sleep(5000);
        return 0;
}
[/mw_shl_code]
沙发
发表于 2014-10-8 11:11:29 | 只看该作者
这个cmp写得不是很好
首先是违背了惯例,在标准库中的strcmp memcmp这些函数,都是a < b的时候返回-1 ,a==b的时候返回0,a > b的时候返回1。这个习惯被后来大多数语言继承了

然后在a == b的时候返回-1,那么a==b的时候依然会发生交换,影响程序的效率

建议写成
  1. int cmp(const void* a, const void* b)
  2. {
  3.   int x = *a, y = *b;
  4.   if(x < y)
  5.     return -1;
  6.   else if(x == y)
  7.     return 0;
  8.   return 1;
  9. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表