幾個算法核心
1)相對于冒泡排序,快排在一次遍歷的時候不是光鄰居互換,他是右邊探測的點(diǎn)和左邊探測的點(diǎn)大跨步互換。
2)通過分治的思想提高排序的效率
如何才能熟練的掌握快排的編碼
- 入?yún)⒎肿笥遥麄€過程是個遞歸過程
- 遞歸退出條件是左邊坐標(biāo)大于或者等于右邊。
- 函數(shù)內(nèi)的主循環(huán)是兩個探查坐標(biāo)不重合赐稽,一輪遞歸要保證左右探查坐標(biāo)最終重合,也就是所有數(shù)據(jù)都遍歷到浑侥。
- 把最左邊的數(shù)據(jù)定位基準(zhǔn)姊舵。
- 從最右邊和最左邊分別開始探查,雙索引探查寓落,只要這兩個索引不重合就繼續(xù)探查括丁。探查步驟是,先從最右邊開始找比基準(zhǔn)小的值伶选,然后從最左邊開始找比基準(zhǔn)大的值史飞。找到后完成一次交換,如果索引重合了仰税,就和基準(zhǔn)交換构资。
- 基準(zhǔn)交換后,二分開始遞歸陨簇。
void qSort(int a[], int left, int right)
{
if(left>=right)
return;
int i = left;
int j = right;
int base = a[left];
while(i!=j)
{
while(a[j]>=temp && j>i)
j--;
while(a[i]<=temp && i<j)
i++吐绵;
if(i<j)
{
int temp = a[j];a[j]=a[i];a[i]=temp;
}
}
a[left] = a[j];
a[j] = base;
qSort(a,left, i-1);
qSort(a,i+1, right);
}