数据结构之快速排序
2009-05-16 15:54
447 查看
#include <iostream> using namespace std; // 快速排序的实现基于分治法,具体分为三个步骤。假设待排序的序列为L[m..n]。 // 分解:序列L[m .. n]被划分成两个可能为空的子序列L[m .. pivot-1]和L[pivot+1 .. n], // 使L[m .. pivot-1]的每个元素均小于或等于L[pivot],同时L[pivot+1.. n]的每个元素均大于L[pivot]。 // 其中L[pivot]称为这一趟分割中的主元(也称为枢轴、支点)。 // 解决:通过递归调用快速排序,对子序列L[m .. pivot-1]和L[pivot+1 .. r]排序。 // 合并:由于两个子序列是就地排序的,所以对它们的合并不需要操作,整个序列L[m .. n]已排好序。 //算法在最坏的情况下运行时间为O(n^2), //但由于平均运行时间为O(nlogn), //并且在内存使用、程序实现复杂性上表现优秀, //尤其是对快速排序算法进行随机化的可能, //使得快速排序在一般情况下是最实用的排序方法之一。 //快速排序 void quick_sort(int a[],int low, int high) { int i,j,pivot; if (low < high) { pivot = a[low]; i = low; j = high; while (i < j) { //从顶端开始比较值,如果小于标准值,停止 while (i < j && a[j] >= pivot) { j--; } //将比pivot小的元素移到低端,下标加加 if (i < j) a[i++] = a[j]; //从底端开始比较值,如果大于标准值,停止 while (i < j && a[i] <= pivot) { i++; } //将比pivot大的元素移到顶端,下标减减 if (i < j) a[j--] = a[i]; } //pivot移动到最终位置 a[i] = pivot; //对左区间进行递归排序 quick_sort(a, low, i-1); //对右区间进行递归排序 quick_sort(a, i+1, high); } } void print_array(int a[], int n) { for(int i = 0; i < n; i++) { cout << a[i] << ","; } } int main() { int data[9] = {54,38,96,23,15,72,60,45,83}; quick_sort(data, 0, 8); print_array(data,9); return 0; }
相关文章推荐
- 数据结构之快速排序
- 【数据结构】快速(QuickSort)排序之——挖坑法
- C语言 递推与递归 数据结构实验之排序八:快速排序
- 数据结构之内部排序--快速排序
- 数据结构之快速排序
- 从零开始_学_数据结构(六)——排序(冒泡、插入、希尔、简单选择、归并、快速)
- 数据结构基础(4) --快速排序
- 数据结构之浅析快速排序
- 数据结构之——快速排序
- 数据结构之快速排序
- 【数据结构与算法】快速排序
- [C++]数据结构:排序算法Part2----快速排序、归并排序、箱子排序、基数排序
- 数据结构实验之排序八:快速排序
- 数据结构基础(4) --快速排序
- 数据结构(7)快速排序
- 【数据结构】快速(QuickSort)排序之——前后指针法
- 数据结构实验之排序八:快速排序
- java-数据结构——快速排序
- 数据结构与算法——快速排序
- 数据结构之快速排序