码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构--排序(上)--快速排序

时间:2015-08-31 19:00:31      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

快速排序

  传说中最快的排序算法。没有一种排序算法在任何情况下是最好的。 

  快速排序和归并排序有相同的策略,就是分而治之。分而治之就会用到递归。、

  技术分享

 

  递归要有一个最小的集合。

  主元 怎么选,决定了算法简单不简单。

技术分享

什么是快速排序算法的最好情况?  B. 每次正好中分

下面是快速排序的最好情况:技术分享

选主元

  选住院的方法:

  1、选取第一个

  2、随机取,rand()函数不便宜啊- -!

  3、取数列的中位数

算法1:选取第一个

 技术分享

算法2:取数列的中位数

  技术分享

子集划分

 技术分享

当我们讲指针的时候,不是C语言里面的指针,只是记录元素的位置。

技术分享

pivot主元要和 i 换位置,

快速排序为什么快呢,每一次他选定一个主元以后,主元是被放到了最终的正确的位置上

如果有元素正好等于pivot怎么办?

1、停下来交换?

2、不理它,继续移动指针?

我们举个极端的例子,元素里面全是和主元相同的。那么我们怎么办?最后主元停在数组的中间位置。这么做的好处,每一次递归的时候原始数列就被分两个等长的数列,这样的时间复杂度是NlogN的

如果不理它,每一次子集划分的时候我的主元放在某一端点的,那样时间复杂度是N2了。所以还是停下来交换吧。

技术分享

算法实现

技术分享

快速排序的标准接口应该怎么写?      Quicksort( A, 0, N-1 );

 

技术分享

 

数据结构--排序(上)--快速排序

标签:

原文地址:http://www.cnblogs.com/zrui513/p/4773561.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!