今天再複習一下快排:
當初看左神的演算法課,受益匪淺。
他是先講解了荷蘭國旗問題,然後再引出的快排,如下:
給定乙個陣列arr,和乙個數num,請把小於num的數放在陣列的左邊,等於num的數放在陣列的中間,大於num的數放在陣列的右邊。
要求時間複雜度為o(n)、額外空間複雜度為o(1)。
分析:三個指標法:乙個指向前頭less,乙個指向尾部more,乙個是當前下標cur。當前下標由指向前面的指標推著前進。
publicstatic
int partition(int arr, int l, int r, int
num)
else
if (arr[cur]>num)
else
}return
arr;
}private
static
void swap(int arr, int i, int
j)
根據荷蘭國旗問題,變形,讓num=arr[arr.length-1],即是將比較的基準值變成陣列arr的末尾值;
另外使得 r= arr.length-2; 將r變成陣列 arr 中的倒數第二個值;
這樣就形成了快排;
在這裡,引入了乙個「分治」的思想,以及求分治的邊界點;
//根據荷蘭國旗問題改進
public
int quicksort3(int arr, int left, int
right)
}public
int partition3(int arr, int l,int
r)else
if(arr[cur] >arr[r])
else
}swap(arr,r,right);
//① :
這裡和荷蘭國旗不一樣:交換當前比對值到中間相等區;
return
newint;//②:
這裡和荷蘭國旗不一樣:返回小區間的右臨界和大區間的左臨界;
}
注:
在① 處:其實是把當前的比對基準值arr[r] 和大區間的左側邊界進行交換,這樣[l, left+1)就是小區間,(right,r]就是大區間【注意區間開閉,對應 ② 步】;常學常樂
over......
python實現快排演算法 python快排演算法詳解
快排是python經典演算法之一。1 下面講解的是什麼是快排和快排的圖示。2 快排是一種解決排序問題的運算方法。3 快排的原理 在陣列中任意選擇乙個數字作為基準,用陣列的資料和基準資料進行比較,比基準數字打的數字的基準數字的右邊,比基準數字小的數字在基準數字的左邊,第一次排序之後分為比基準資料大或比...
2011 4 15 快排演算法,堆排演算法
template int get pivot index value type array,int start,int end value type pivot array start while start end while startpivot end array start array en...
排序演算法 快排
今天聊聊排序演算法,排序演算法平時也會用到,有很多比如,冒泡,快排,選擇,歸併排序等 今天就聊一聊快速排序演算法排序演算法的乙個宗旨就是經過一趟排序,何為一趟排序呢?就是遍歷完一次陣列,陣列中的一部分資料比另外一部分的資料都要小 當然這兩部分資料內部仍然是無序的,然後我們再對這兩部分資料分別進行排序...