資料結構 快速排序

2021-10-05 01:30:47 字數 969 閱讀 1829

目錄

快速排序的基本思想:

基準值的劃分:

快速排序的基本思想:(以公升序為例)選取乙個基準值,按照基準值將資料劃分為左右兩部分,使其左側部分 < 基準值 < 右側部分。與歸併排序的均分不同快排的劃分是不均勻的可能會出現極端的情況如:左部分 < 基準值  ,基準值《右部分。遞迴排序基準值的左側,遞迴排序基準值的右側。

所以快排的框架是比較簡單的,重點是按照基準值對資料進行劃分。

//[left,right) 左閉右開

void quicksort(int* array,int left,int right)

}

這就是快排的框架是不是非常的簡潔明瞭,因為整個過程是遞迴的所以才會這樣

基準值的劃分:

1.hoare劃分法: hoare就是提出快排的大佬 ,他提供這樣一種方法

begin開始位於區間的第乙個元素,end位於區間的最後乙個元素,在一趟的排序中,先從begin開始從左向右找打乙個大於基準值的值(begin++,begin< end),然後end開始從右向左找第乙個小於基準值的值(end--, begin < end)

if(begin < end ) 進行交換  

如果begin和end相遇則與基準值交換,這也表明這一趟的排序已經結束

現在已經將區間劃分為兩個部分,然後把這兩個部分看作新的區間繼續進行劃分,直到整個區間有序

int partion(int* array, int left, int right)

}swap(&array[begin],&array[right - 1])

return begin;

}

資料結構 排序 快速排序

對序列 47,31,83,91,57,18,96,16 進行快速排序 首元素為基準 第二趟排序結果是 正確答案 b 你的答案 c 錯誤 18 31 16 47 57 91 96 83 16 31 18 47 57 91 96 83 16 18 31 47 57 91 96 83 16 18 31 4...

資料結構 排序 快速排序

快速排序在平均情況下是效果最好的排序演算法 每趟子表的排序都是從兩頭向中間交替逼近,接下來舉乙個例子 sorry,上面這個圖的6和5的位置畫反啦,快速排序全域性有序,一趟排序便可以確定基準值的最終位置 類別排序方法 最好時間 最壞時間 平均時間 空間複雜度 穩定性序列特徵 適用於插入排序 直接插入排...

資料結構排序 快速排序

快速排序是對氣泡排序的改進,它的基本思想是通過一趟排序將資料分成兩部分,一部分中的資料都比另一部分中的資料小,再對這兩部分中的資料再排序,直到整個序列有序,如下圖所示。快排的遞迴實現 1 include 2 include 3 4intn 5 6 7 分割使樞軸記錄的左邊元素比右邊元素小8 9int...