優化點:
優化選取中軸元素
以上**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...