資料結構之快速排序(三)

2021-07-25 15:18:06 字數 1292 閱讀 7580

思想:1.在待排序的元素任取乙個元素作為基準(通常選第乙個元素,但最好的選擇方法是從待排序元素中隨機選取乙個作為基準),稱為基準元素;

2.將待排序的元素進行分割槽,比基準元素大的元素放在它的右邊,比其小的放在它的左邊;

3.對左右兩個分割槽重複以上步驟直到所有元素都是有序的。

所以我是把快速排序聯想成東拆西補或左拆右補,一邊拆一邊補,直到所有元素達到有序狀態。也有人稱之為 挖坑(拆)填數(補)+分治法(基準 元素的 左側 和右側 分別按照 左拆右補的方法)

初步實現:

public

intquicksort(int arr, int _left, int _right)

//退出時,_left等於_rigth。將basetemp填到這個坑中。基準元素歸位

arr[_left] = basetemp;

return _left;

}// 分治法 基準元素的左側 和 基準元素的右側

public

void

quicksortrecursion(int arr, int _left, int _right)

}

精簡優化**:

public

static

void

quicksortbetter(int arr, int _left, int _right)

arr[left] = temp; //基準元素歸位

quicksortbetter(arr, _left, left - 1); //對基準元素左邊的元素進行遞迴排序

quicksortbetter(arr, right + 1, _right); //對基準元素右邊的進行遞迴排序}}

演算法分析:

1.當分割槽選取的基準元素為待排序元素中的最大或最小值時,為最壞的情況,時間複雜度和直接插入排序的一樣,移動次數達到最大值 cmax = 1+2+…+(n-1) = n*(n-1)/2 = o(n^2) 此時最好時間複雜為o(n^2)。

2.當分割槽選取的基準元素為待排序元素中的」中值」,為最好的情況,時間複雜度為o(nlog2n)。

3.快速排序的空間複雜度為o(log2n).

4.當待排序元素類似[6,1,3,7,3]且基準元素為6時,經過分割槽,形成[1,3,3,6,7],兩個3的相對位置發生了改變,所是快速排序是一種不穩定排序。

資料結構排序之快速排序

本來昨天晚上就可以把快速排序發上去,沒想到昨晚csdn竟然維護,那麼就只能在停電的情況下下用學校的卡的要死的網發這快速排序了,不停多好,停電了還得自己掏腰包買個充電檯燈,裝的好像像學霸一樣,實際就是乙個大學渣,我也就不jjyy,直接說快速排序的思想,我是這樣理解的,用乙個變數作為基準,在拿出i和j兩...

資料結構之快速排序

3.編寫乙個快速排序的演算法,並且在main函式中驗證其功能已實現 快速排序 quick sort 又稱劃分交換排序,基本思想 在待排序的n 個記錄中記錄中任取乙個作為 基準 將其餘記錄分為兩組,第一組中 各記錄的鍵值均小於或等於基準的鍵值,第二組中各記錄的鍵值均大於 或等於基準的鍵值,而基準就排在...

資料結構之快速排序

旁白 演算法小白白一枚,突然要掌握演算法。花廢了2個小時把一些基本的知識掌握。包括偽 書寫規則 演算法設計技術和時間複雜性的計算弄清楚。本打算用本子做筆記,一想發現沒筆 沒本子,這對本在疫情被困在家的我來說是一筆 鉅額 所以想到寫部落格,一方面剛接觸感覺有點意思,另一方面當做筆記隨時可以複習看看 廢...