實際中最常用的一種排序算法,速度快,效率高,就像它的名字一樣。
快速排序的基本思想是:
1.先從數列中取出一個作為基準。
2.分區過程,將比這個基數大的數全部放在它的右邊,小于或者等于它的數就全部放在它的左邊。
3.然后再對左右區間重復第二步,直到各區都只有一個數就排序完成了。
實現的代碼:
~~~
#include "stdafx.h"
#include <stdlib.h>
void quickSort(int a[], int start, int length)
{
if (start < length)
{
int i, j, key;
i = start;
j = length;
// 基準數
key = a[start];
while (i < j)
{
// 從右向左找第一個小于基數(key)的那個數
while(i < j && a[j] >= key)
j--;
if(i < j)
a[i++] = a[j];
// 從左向右找第一個大于等于基數(key)的那個數
while(i < j && a[i] < key)
i++;
if(i < j)
a[j--] = a[i];
}
// 當i=j就把找到的基數放好位置了
a[i] = key;
// 遞歸下一個直到i=j
quickSort(a, start, i - 1);
quickSort(a, i + 1, length);
}
}
int main(int argc, _TCHAR* argv[])
{
int a[] = {5,6,2,3,1,8,9,0,1};
int len = sizeof(a)/sizeof(*a);
quickSort(a,0,len-1);
for (int i=0;i<len-1;i++)
{
printf("%d ",a[i]);
}
system("pause");
return 0;
}
~~~
運行結果:

快排還可以改進,可以加線程來做,隨機選擇基準數等等
- 前言
- C++讀取配置文件
- 結構體內存對齊后所占內存空間大小的計算
- do{}while(0)的妙用
- Cocos2dx實現翻牌效果(CCScaleTo與CCOrbitCamera兩種方式)
- C++的error LNK2019: 無法解析的外部符號編譯錯誤
- Java使用JNI調用C++的完整流程
- strupr與strlwr函數的實現
- strcat函數實現
- Windows上VS使用pthread重溫經典多線程賣票(pthreads-w32-2-8-0-release.exe)(windows上使用pthread.h)
- pthread的pthread_join()函數理解實驗
- 順序存儲結構和鏈式存儲結構的選擇
- C語言冒泡排序
- VS看反匯編、寄存器、內存、堆棧調用來學習程序設計
- 快速排序
- C++的構造函數初始化列表
- fatal error C1083: 無法打開包括文件: “SDKDDKVer.h”: No such file or directory
- C++實現簡單的String類