排序演算法(六)快速排序的優化

2021-08-08 08:49:57 字數 1091 閱讀 4312

//優化方法

一、分別取第乙個數字,中間數字,和最後乙個數字進行比較,選擇中間的數字作為基準

//三者取中只能優化資料基本有序的情況,包含降序和公升序

static

int mid(int a,int b,int c)

if(a > c)

if(b > c)

return b;//b則是中間大的數字

}//三者取中得到基準

static

int getpivot(int *arr,int low,int high)

int mid = (low+high)/2;

int piv = mid(arr[low],arr[mid],arr[high]);//基準值

int tmp;

//將基準值交換到low下標

//if(piv == arr[low])//不需要交換

if(piv == arr[mid])

不能 else

if(piv == arr[high])

return piv;

}//三者取中,優化基準

int partition(int *arr,int low,int high)//o(n),o(1)

if(low == high)

else

while(low//從前往後找比基準大的數字

if(arr[low] > tmp)

else

}arr[low] = tmp;

return low;

}//優化方法二

//選擇第乙個作為基準,但是在移動low和high的同時進行冒泡

static

int partition2(int *arr,int low,int high)

high--;

}if(low == high)

else

while(low//從前往後找比基準大的數字

low++;

}if(arr[low] > piv)

else

}arr[low] = piv;

return low;

}

演算法排序(六) 快速排序法

快速排序法一般來說可以分為三種,分別是 基礎快速排序法 雙路快速排序法 三路快速排序法 下面分別對以上三種快排進行梳理。排序思路 首先傳入待排序陣列,使用變數l表示陣列下標起點,使用變數r表示陣列下標終點,然後取陣列第乙個元素e做中介,使用迴圈逐步將陣列元素分為比e小和不比e小的兩部分 使用變數j記...

排序演算法 六 快速排序(交換排序)

直接排序屬於交換排序 基本思想 1 選1個基準元素 通常是第乙個元素或最後乙個元素 將待排數列分成兩部分,一部分比基準元素小,一部分比基準元素大 2 再對這兩部分數列重複步驟1 時間複雜度 最好情況 o n logn 最壞情況,退化為氣泡排序 o n n 穩定性 不穩定 python 實現 quic...

排序演算法之六 快速排序 Quick Sort

快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 在平均狀況下,排序n個元素要o nlogn 次比較。在最壞狀況下則需要o n 2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他...