快速排序優化

2021-09-04 05:06:41 字數 1022 閱讀 6166

優化點:

優化選取中軸元素

以上**target 選取的位置是認定了陣列元素的首位,但是若這個數值的大小不在整個陣列的中間位置,會大大降低快排的效能。

target =array[low] 這句就成了乙個潛在的效能瓶頸。因此快速排序的速度還取決於這個target關鍵元素在陣列中的位置。 【改進方法】

三數取中法:去三個元素先進行排序,將中間數作為中軸元素,下面的**選取陣列的左、中、右三個數;

#include

using namespace std;

void

swap

(int

&x,int

&y)int

partition

(int

* arr,

int low,

int high)

if(arr[high]

)//前2個if保證最後乙個數是最大的

//這個if是保證第乙個數的值是三個數中第二大的

if(arr[mid]

>arr[low]

)//選好後就正常些快速排序了

int pv = arr[low]

;while

(lowswap

(arr[low]

,arr[high]);

while

(low<=pv)

swap

(arr[low]

,arr[high]);

}return low;

}void

quick_sort

(int

* arr,

int low,

int high)

}int

main()

for(

int i =

0;i<

10;i++

)system

("pause");

return0;

}

快速排序 優化

快速排序是對氣泡排序的一種改進。其基本思想基於分治法 在待排序表中選擇乙個元素當作標準記為mark,通過一次排序將排序表分成兩個部分,前一部分是小於mark的所有元素,後一部分是大於等於mark,mark放在了最終的位置上,這一過程叫做一趟快速排序。然後分別遞迴的對兩個子表進行上述重複過程,直到每個...

排序 快速排序及其優化

在排序中交換數字,達到排序的目的 由於 是c語言寫的,所以需要給出交換函式 如果是c 那麼就直接用交換函式 void swap int left,int right 先標記基準值 這裡先取最後乙個元素為基準值,記錄起來 之後定義兩個指標,然後前後遍歷,找到比基準值大的或者小的的元素的位置,然後進行標...

快速排序及其優化

include include 呼叫c 自帶sort include include include using namespace std define max 1000000 define k 12 ifdef debug define new new normal block,file lin...