32排序演算法之快速排序

2022-09-05 20:57:20 字數 1176 閱讀 1304

排序演算法之快速排序

基本原理——反覆進行有序劃分。

有序劃分方法

在陣列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 的元素通過直接插入...