快速排序法

这个排序方法的时间复杂度为O(nlogn),最坏时间复杂度为O(n^2),所以说是属于所有排序方法中比较高效率的一种了。

 

这种排序方法的基本思想是:

先找到一个区间中的一个基准点,然后找到这个区间右边所有小于这个基准点的元素都放到基准点左边,还有这个区间左边所有左边大于这个基准点的元素都放到基准点右边。用递归思想,将区间化小,一直小到只有一个元素即排序完成。

百度百科这么说的:快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

该思想的实现代码写出来可能不一样,但是思想大概就是这个思想。

下面是我搜集到的一个人写的快速排序的代码:

 1 void partition(int a[], int start,int end)
 2 {
 3     if(start>=end)
 4         return;
 5     
 6     int low = start;
 7     int heigh = end;
 8     int index = a[low];                      // 基准点选在区间开头的元素
 9     
10     while(low<heigh)
11     {
12         while(a[heigh]>index&&low<heigh)     // 从区间右侧开始,找到比基准点index小的元素就放到区间左边
13         {
14             heigh--;
15         }
16         if(low<heigh)
17         {
18             a[low++] = a[heigh];
19         }
20         while(a[low]<index&&low<heigh)       // 从区间左边开始,找到比基准点index大的元素就放到区间右边
21         {
22             low++;
23         }
24         if(low<heigh)
25         {
26             a[heigh--] = a[low];
27         }
28     }
29     
30     a[low] = index;                        // 把基准点放到区间中间
31     partition(a,start,low-1);              // 把基准点左侧的区间进行整理----递归
32     partition(a,low+1,end);                // 把基准点右侧的区间进行整理----递归
33 }

下面是调用示例

    int a[] = {1,3,5,4,3,0,8,6};    
    partition(a,0,7);

运行结果

参考文章:

  1. http://www.cnblogs.com/surgewong/p/3381438.html
  2. http://baike.baidu.com/link?url=GDBGdDYxqZmDS.....
  3. http://www.cnblogs.com/luchen927/archive/2012/02/29/2368070.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值