快速排序是對冒泡排序的改進,是一種不穩定的排序算法,其時間複雜度是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;
}