快速排序quicksort

2021-07-05 18:17:57 字數 1180 閱讀 9810

快速排序解讀(遞增排序)

1.分治法(divide-and-conquermethod)

function quicksort(arr,left,right)

}

2.partition

目的:找乙個pivot

(這裡找陣列最左端的),將這個pivot放在合適的位置,

pivot的左邊元素都小於它,右邊的元素都大於它

eg:     [6,2,4,1,9,10,3,5]  //6是pivot

[5,2,4,1,3,6,9,10]  //partition之後 

要點:1.找乙個pivot(這裡找陣列最左端的)

2.設定乙個索引i

,這個索引記錄的是小於

pivot的

元素個數,初始值為l

function partition(arr ,left ,right)

for(j=left+1;j<=right;j++)}}

swap(left,i);

}

解說:pivot=6, left = 0,right=7,j的初始值為1,i的初始值為0

當 j=3時,i也等於3

[6 , 2 , 4 , 1 , 9, 10 , 3 , 5 ]

i,j  

當 j=5時,因為arr[4],arr[5]都大於pivot,所以i不遞增,i=3

[6 , 2 , 4 , 

1, 9, 10 , 3 , 5 ]

i     j

當 j=6時,arr[6]

[6 , 2 , 4 , 1,9

, 10 ,3

, 5 ]

i      j

並且arr[i]和arr[j]交換位置

[6 , 2 , 4 , 1,3

, 10 , 9

, 5 ]

當 j =7時 arr[7]

[6 , 2 , 4 , 1 ,

3, 10 ,9 ,5 ]

i       j

並且arr[i]和arr[j]交換位置

[6 , 2 , 4 , 1 ,3, 

5,9 , 10]

i最後swap(left,i)

[5 , 2 , 4 , 1 ,3, 

6,9 , 10]

快速排序 QuickSort

快速排序通常用於排序的最佳的使用選擇,其期望執行時間為 o nlgn 能夠進行就地排序。最壞執行時間為 o n 2 演算法描述 分解 divide 陣列 a beg end 被劃分為兩個子陣列 a beg mid 1 和a mid 1 end 使得a beg mid 1 中的資料都小於 a mid ...

快速排序 quicksort

快速排序 quicksort 是分治法的典型例子,它的主要思想是將乙個待排序的陣列以陣列的某乙個元素x為軸,使這個軸的左側元素都比x大,而右側元素都比x小 從大到小排序 然後以這個x在變換後陣列的位置i分為左右兩個子陣列,再分別進行快速排序,直到子陣列中只有乙個元素為止。快速排序演算法如下 void...

快速排序 QuickSort

1,void quicksort int a,int low,int high 這個函式是排序的遞迴部分,mid就是已經確定的基準元素的位置。2,int partition int a,int low,int high 這個函式幹了兩件事 1 挑出來乙個基準元素 這裡選的是最後乙個作為基準 找它的正...