快速排序是对冒泡排序的改进,是一种不稳定的排序算法,其时间复杂度是O(n),被认为是目前最好的一种内部排序方法。
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。——此处摘自百度百科。
Talk is cheap. Show me the code。关键是用一个基准值作为比较对象。
void quick_sort(int a[], int low,int high)
{
if (high < low)return;
int i = low;
int j = high + 1;
int key = a[low];
while (true)
{
//从左到右找比基准key大的值
while (a[++i]<key)
{
if (i == high)
break;
}
//从右向左找比基准key小的值
while (a[--j]>key)
{
if (j == low)
break;
}
if (i >= j) break;
//交换i,j对应的值 不使用第三方变量
a[j] = a[i] + a[j];
a[i] = a[j] - a[i];
a[j] = a[j] - a[i];
}
//中枢值与j对应值交换
int temp = a[low];
a[low] = a[j];
a[j] = temp;
//递归
quick_sort(a, low, j - 1);
quick_sort(a, j + 1, high);
}
int main()
{
int arr[] = { 12, 11, 13, 5, 6, 7 };
int len = sizeof(arr) / sizeof(int);
//bubble_sort(arr, len);
//selece_sort(arr, len);
quick_sort(arr,0,len-1);
for (int i = 0; i < len; i++)
{
cout << arr[i] << " ";
}
cout << endl;
getchar();
return 0;
}