(9)交换排序之二 快速排序
2011-05-01 22:12
806 查看
快速排序(Quick
Sort)是对起泡排序的一种改进。它的基本思想是,通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
首先拿到枢轴位置,然后对低于枢轴位置的序列进行分区(也是排序的一个过程),再对高于枢轴位置的序列进行同样的操作。如上面的序列。第一次分区后序列中,元素[1]到[8]变成27, 38, 13, 49, 76, 97, 65, 49。4是枢轴位置。很明显元素[4]之前都是小于49的,[4]之后的关键值都是大于等于49的。同样对元素[1]...[4]和元素[5]...[8]这两段再分别进行Partition的过程。如此递归,直到low不小于high,说明连续两个元素都进行了比较。递归依次返回。
Sort)是对起泡排序的一种改进。它的基本思想是,通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
// 快速排序 void CExchangeSort::QuickSort(void) { const int count = 9, length = count -1; int L[count] = {0, 49, 38, 65, 97, 76, 13, 27, 49}; int low = 1; int high = length; QuickSort(L, low, high); //打印排序结果。 for (int i = 0; i <= length; ++ i) { cout << L[i] << "\t"; } cout << endl; } // 快速排序之递归 void CExchangeSort::QuickSort(int L[], int low , int high) { if (low < high) { int pivotloc = Partition(L, low, high); //拿到枢轴记录的位置 QuickSort(L, low, pivotloc - 1); QuickSort(L, pivotloc + 1, high); } } // 快速排序之分区 int CExchangeSort::Partition(int L[], int low , int high) { L[0] = L[low]; int pivotkey = L[low]; while(low < high) { while (low < high && L[high] >= pivotkey) -- high; L[low] = L[high]; while (low < high && L[low] <= pivotkey) ++ low; L[high] = L[low]; } L[low] = L[0]; return low; }
首先拿到枢轴位置,然后对低于枢轴位置的序列进行分区(也是排序的一个过程),再对高于枢轴位置的序列进行同样的操作。如上面的序列。第一次分区后序列中,元素[1]到[8]变成27, 38, 13, 49, 76, 97, 65, 49。4是枢轴位置。很明显元素[4]之前都是小于49的,[4]之后的关键值都是大于等于49的。同样对元素[1]...[4]和元素[5]...[8]这两段再分别进行Partition的过程。如此递归,直到low不小于high,说明连续两个元素都进行了比较。递归依次返回。
相关文章推荐
- 交换排序------快速排序
- 【重温经典算法之二】快速排序
- 排序算法系列-交换之快速排序
- 排序算法之二:快速排序
- 交换排序之快速排序
- 归并排序,堆排序,基数排序,希尔排序,快速排序,交换排序,选择排序和插入排序的总结和比较
- 1.交换排序:冒泡排序和快速排序
- 【排序算法】 快速排序 quick sort(交换类排序)
- 两种常用的交换排序算法--冒泡排序、快速排序
- 排序算法-交换排序_快速排序
- 排序高级之交换排序_快速排序
- 交换排序——冒泡排序和快速排序——C语言描述
- 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)
- 【算法-排序之二】快速排序
- 排序算法(三)、交换排序 —— 冒泡排序 和 快速排序
- 第十五周项目1 验证算法(4)交换排序之快速排序
- 交换排序——冒泡排序和快速排序——C语言描述
- 交换类排序:冒泡排序和快速排序
- 1.交换两个数;2.求最大值;3.最大公约数;4.快速排序
- 第十六周 项目一(4)交换排序之快速排序