前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速排序法

快速排序法

作者头像
CN_Simo
发布2022-05-10 13:35:51
1740
发布2022-05-10 13:35:51
举报
文章被收录于专栏:Script Boy (CN-SIMO)Script Boy (CN-SIMO)

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

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

先找到一个区间中的一个基准点,然后找到这个区间右边所有小于这个基准点的元素都放到基准点左边,还有这个区间左边所有左边大于这个基准点的元素都放到基准点右边。用递归思想,将区间化小,一直小到只有一个元素即排序完成。 百度百科这么说的:快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 该思想的实现代码写出来可能不一样,但是思想大概就是这个思想。

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

代码语言:javascript
复制
 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 }

下面是调用示例

代码语言:javascript
复制
    int a[] = {1,3,5,4,3,0,8,6};    
    partition(a,0,7);

运行结果

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档