快速排序(QuickSort)——数组

#对于快速排序的具体介绍就不用赘述了。这里记录几点要点。

  设定L0,R0为需排序数组的起点终点,L,R为检查到达的位置。

  选取数组的首端(L0)或者尾端(R0)元素为基准元素q,如果是L0则从R0开始往前检查,R0则从L0开始往后检查,很显然,这样的话基准元素q始终位于L或者R位置,最后排序完成时,R=L=q的位置。

  快速排序是一种就地排序(就地排序就按照字面意思理解即可),L前的和R后的位置是已经检查排序完了的。这也是为什么一直交换R,L就可以排序完成的原因,这样交换可以不去创造新的空间。

  时间复杂度最坏情况O(n^2),期望情况O(nlgn)。

#代码实现:

int num[];                         //排序的数组num

//交换num[L],num[R]

void swap(int L,int R)
{
    int temp;
    temp=num[L];
    num[L]=num[R];
    num[R]=temp;
}

//降序排序
void QS(int L,int R)
{
    int q;                 //设定基准值q
    int L0=L;           //需排序的数组左端
    int R0=R;          //需排序的数组右端
    q=num[R];        //q取尾端元素
    while(L<R)        

    {

       //找到左端比q小的数,交换

       while(num[L]>=q&&R>L)
           L++;
       swap(L,R);

       //左端寻找完一次,从右端开始,找到右端比q大的数,交换

       while(num[R]<=q&&R>L)
           R--;
       swap(L,R);
    }

    //分治(递归)

    if(R>L0)
       QS(L0,R-1);
    if(L<R0)
       QS(L+1,R0);
}

#函数库

快速排序函数

qsort(void*begin,int num,int width,int (*f)(const void*a,const void*b));包含在stdlib.h中

begin为排序开始地址,num为需排序元素个数,width为每个元素的大小,f为指向比较函数的指针(比较函数通常自己写,qsort();得到返回值,return 负; 表示a<b,return 0; 表示a=b, return 正; 表示a>b)


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值