關於快速排序,該演算法實現原理是將要排序的一組資料根據乙個被選中的資料,以這個資料為中心將資料分成兩側,一側大一側小,使用遞迴,將分好的兩組資料分別進行再次分組,直至不能再分,這時排序則排序完畢。
因此快速排序演算法的中心應該是如何根據選中的資料將資料分成兩組,而這裡這個選中的資料則直接預設為資料組的第乙個資料,雖然在一些情況下可能很慢,但大多數情況是比一般排序演算法快的。
下面提供一下根據乙個數將陣列劃分成兩部分的演算法(c#實現)
//k為中間數,這裡的這個函式和下面快排的實現有一點不同,這裡的k可以是陣列的元素,也可以不是,而快排由於是指定了第乙個元素為界,所以簡化了一下**
public void sort(int array,int k)
while (start
<= end && array[start] < k)
//交換頭尾
if(start
<= end)
}//這裡的start則是k在劃分後的陣列所在的下標
console.writeline(start);
}
而快速排序的c++實現如下(這裡是公升序排法):
void quick_sort(array
arr,int start,int end)
//從尾部開始遍歷查詢比被選中的數小的數,並將它放在頭的位置
//由於是將start所在的數當作中間數,所以不用儲存start的值
arr[first]=arr[last];
while(first//接著從頭部開始遍歷查詢比被選擇的數大的數,並將它放在尾的位置
arr[last]=arr[first];
}//如果頭尾沒有碰頭,則繼續進行比較,確保以被選中的數為界的左右兩側資料組一大一小
arr[first]=flag;//將被選中的數放在兩組資料的中間
//使用遞迴再次排序
quick_sort(arr,start,first-1);
quick_sort(arr,first+1,end);
}}
快速排序的遞迴實現
快速排序通常是排序的最佳選擇,因為其平均的執行時間為o nlgn 最壞情況下每次劃分都產生兩個分別包含n 1個元素和乙個元素的區域,此時時間複雜度為o n 最佳情況下每次劃分都將陣列分成兩個長度差不多的區域,此時時間複雜度與平均效能差不多。快速排序的遞迴形式如下 void do quick sort...
快速排序的遞迴實現
當主元為陣列最後乙個元素時的實現 package offer.giveme 實現演算法導論上的快速排序方法 public class quicksort public int partition int num,int low,int high 分割方法,將陣列的最後乙個元素作為主元。low為當前需...
快速排序的遞迴實現
1.快速排序的思路 1 在陣列中選擇乙個數作為基準,為了避免效能惡化,可採用隨機數來選擇 2 把隨機選擇的基準數交換到第乙個位置或者最後乙個位置 3 順序遍歷陣列,把小於基準數的放在基準的左邊,大於基準數的放在基準數的右邊,從而把陣列分為兩個子陣列 4 分別對兩個子陣列重複步驟1 3,直到所有的元素...