排序演算法之快速排序
基本原理——反覆進行有序劃分。
有序劃分方法
在陣列a中任選乙個元素x作為劃分元素,通過比較將小於x的元素換到陣列的左端(左段),
將大於或等於x的元素換到陣列右端(右段),x本身位於兩段之間。如果左、右段元素個數多於1,則遞迴的將左、右段各自劃分,直到每段元素個數都不超過1,從而達到排序目的。
示例
遞迴的快速排序演算法
劃分函式partition完成對乙個劃分段的劃分,返回劃分元素最終位置。
遞迴函式qksort完成劃分段的一對下標「配對」,呼叫partition對其劃分。
主調語句:
qksort(a,0,n-1); //對陣列a[n]排序
(1)劃分函式
void partition(int a[ ],int s,int t,int &k)
;
if(arr[j]>temp)
j--;
else
; };
arr[p]=temp;
if(left
quicksort(arr,left,i-1
);
if(p
quicksort(arr,j+1
,right);
};int
main()
; quicksort(arr,
0,9);
for(int i=0;i<10;++i)
printf(
"%d
",arr[i]);
getchar();
return0;
}
2 排序演算法 快速排序
問題描述 利用快速排序演算法對下列例項排序,在演算法執行過程中,寫出陣列 a第一次排序後被分割的過程。a 65,70,75,80,85,55,50,2 解題思想 在快速排序中,記錄的比較和交換是從兩端向中間進行的,關鍵字較大的記錄一次就能交換到後面的單元,總的比較和移動次數較少。對於輸入的陣列a p...
四 排序演算法 快速排序
快速排序的思想 選擇陣列中的乙個數作為中軸線,然後以這個中軸線為中心,大於中軸線的資料放到右邊,小於中軸線的資料放到左邊,然後每次比較完後再變中軸線的位置,不斷比較下去 include using namespace std template void quick sort t arry,int l...
32 排序演算法(5) 希爾排序
直接插入排序演算法 straight insertion sort 適用於基本有序且記錄數少的陣列,但是這樣的要求已經算比較苛刻了。所以乙個直觀的改進方法是,對於乙個陣列,可以使它變得基本有序,再用用希爾排序改進直接插入排序就會得到比較好的結果,如下圖所示 初始的時候將間隔為 4 的元素通過直接插入...