- 快速排序又叫划分交换排序。由于实测结果这种排序方法速度非常快,故名快速排序。
- 快速排序的基本原理是划分,具体说明如下:
在数组a中任选一个元素作为划分元素(一般选择最左端元素)。换分元素也称中轴值或轴值。把数组a划分成左、中、右3段。其中划分元素x自成中段;其他小于x的元素都排在x之前,是左段;大于或等于x的元素都排在x之后,是右段。左段或右段中可能有一段为空。并递归地将左右各划分为3段,直到每段元素都不超过1,从而达到排序目的。
#include <iostream>
using namespace std;
int partion(int a[], int left, int right)
{
int i = left, j = right;
int x = a[left];
do
{
while (i < j && a[j] >= x) --j;
if (i < j) a[i++] = a[j];
while (i < j && a[i] < x) ++i;
if(i<j) a[j--] = a[i];
} while (i < j);
a[i] = x;
return i;
}
void quick_sort(int a[], int left, int right)
{
if (left < right)
{
int k = partion(a, left, right);
quick_sort(a, left, k - 1);
quick_sort(a, k + 1, right);
}
}
int main()
{
int len;
int array[100];
cout << "输入排序数组的长度:";
while (cin >> len)
{
cout << "输入排序数组:";
for (int i = 0; i < len; ++i)
cin >> array[i];
quick_sort(array, 0, len - 1);
cout << "排序后输出:" << endl;
for (int i = 0; i < len; ++i)
cout << array[i] << ' ';
cout << endl;
cout << "输入排序数组的长度:";
}
return 0;
}