交换排序--快速排序(就是太快,所以很重要)

  让你难过的事情,有一天,你一定会笑着说出来。


一.前言

  交换排序总思想:数据两两比较,发生逆序则交换,直到整个数据有序。交换排序又分为冒泡排序快速排序。本文讲述有关快速排序的知识。


二.快速排序思想

基本思想:
  如果要将一组数据从小到大进行排序,通过一趟排序,将待排序记录分割成独立的两部分,前部分数据都比后部分的数据小,再分别对这两部分进行排序(分治法的思想),以达到整个序列有序。
  举个例子:
交换排序--快速排序(就是太快,所以很重要)_第1张图片
  假设有如上的一组数据,蓝色代表中间数据,绿色代表比蓝色小的数据,红色代表比蓝色大的数据。通过一趟快速排序,绿色将会全部在蓝色的左边,红色将会全部在蓝色的右边,如下:
交换排序--快速排序(就是太快,所以很重要)_第2张图片
  蓝色就将这组数据分成独立的两部分,其左边的数据(绿色)都比其又变的数据(红色)小。
  那是如何达到上诉效果的呢?就是依次将其它数据和我们选择的中间数据比较,小的就放到它的前面,大的就放到它后面。


三.过程分析

操作过程:
1. 任取一元素(如:第一个)为中心(pivot)轴
2. 所有比中心轴小的元素一律前放,比中心轴大的元素一律后放,这样就会形成左右两个子序列
3. 对各子序列重新选择中心元素并依上述规则调整(递归思想)
4. 直到每个子序列的元素只剩一个

快速排序图解:
  有如下的一组数据(图形下面的数字代表数组下标),现在需要将其按从小到大进行排序。
交换排序--快速排序(就是太快,所以很重要)_第3张图片
  任取一个数据为中心轴。这里选取第一个数据为中心轴,将该位置的数据进行拷贝(拷贝后假设该位置没有数据,方便分析),外加两个指示位置的指示指针low与high,low初始指向被拷贝数据的位置,即中心轴数据的位置,high指向这组数据的最后一个数据,如下:
交换排序--快速排序(就是太快,所以很重要)_第4张图片

  此时low所指示的位置没有数据,需要从low与high之间选取一个比中心轴数据(19)小的数据放到该位置。high所指的5号位置25比中心轴数据大,high移动到4号位置,如下:
交换排序--快速排序(就是太快,所以很重要)_第5张图片
  所指的四号

你可能感兴趣的:(排序,c++,数据结构,排序算法,算法)