1、算法描述:
1.1 设当前参加排序的数组为array[0..n-1]- 选择一个元素(通常称该元素为基准元素)作为基准元素;
- 将小于或者等于基准元素的所有元素都移到基准元素的左边;
- 把大于或者等于基准元素的所有元素都移到分界元素的右边;
- 执行完(2),(3)步骤后,基准元素左边元素序列,基准元素,基准元素右边元素序列正好完成排序;
- 然后在对基准元素左边元素序列和基准元素右边元素序列再次执行(1),(2),(3)步骤;
- 直到左边序列和右边序列长度等于1为止,这样排序就完成了。
- 待排序数组序列的第一个元素;
- 待排序数组序列的最后一个元素;
- 待排序数组序列位置居中的元素
(本次代码实例选择第一个元素作为基准元素)
原理如图所示:
说明:排序过程中需要设定两个排序变量i, j.
- i的初始值设置为排序序列中第一个元素, j的初始值设置为排序序列的最后一个元素位置;令x = a[i];
- 当 while ( i<j && a[i]<x )成立时,则i++;如果i<j,则a[i] = a[j];i++;
- 当while ( i<j && a[j]>x ) 成立时,则j--;如果i<j,则a[j] = a[i];j--;
- 执行将基准元素赋给a[i]的操作:a[i] = x;
- 然后递归进行基准元素左边序列和基准元素右边序列的(1)(2)(3)(4);直到整个序列排序结束。
代码实例:
#include <iostream> using namespace std; int quick_sort(int a[], int left, int right) { if (left<right) { int i = left; int j = right; int x = a[i]; while (i<j) { while ( i<j && a[j]>x ) j--; if ( i<j ){ a[i] = a[j]; i++; } while ( i<j && a[i]<x ) i++; if ( i<j ){ a[j] = a[i]; j--; } } a[i] = x; quick_sort(a, left, i - 1); quick_sort(a, i + 1, right); } return 0; } int main() { cout << "**************Quickly_sort***************\n"; int a[] = { 49,38,65,97,76,13,27,49}; int size = sizeof(a) / sizeof(int); cout << "原始的数组:"; for (int i = 0; i<size; i++) cout << a[i] << " "; cout << endl; quick_sort(a, 0, size-1); cout << "排序后数组:"; for (int i = 0; i<size; i++) cout << a[i] << " "; cout << endl; system("pause"); return 0; }
运行结果:
![]()
快速排序的时间复杂度为:O(nlgn)。