[C#] 快速排序法(Quick Sort)
Introduction
快速排序法也把資料不停的分成兩堆,但不是等分,而是與選定的元素比大小來決定,所以快速排序法比大小在前,合併排序法比大小在後。
- http://en.wikipedia.org/wiki/Quicksort
- http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/QuickSort1.htm
- http://zh.wikipedia.org/zh-tw/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F
Examples
class Program {
public static void quickSort(char[] list, int left, int right) {
if (left < right) {
int pivot = partition(list, left, right);
quickSort(list, left, pivot - 1);
quickSort(list, pivot + 1, right);
}
}
private static int partition(char[] list, int left, int right) {
int i = left - 1;
int j = right;
char pivot = list[right]; // 取分區的基準元素
while (true) {
while (list[++i] < pivot) // 右向指標
if (i == right)
break;
while (list[--j] > pivot) // 左向指標
if (j == left)
break;
if (i >= j) // 將左右指標交會?
break;
swap(list, i, j); // 將左右指標所指元素對調
}
swap(list, i, right); // 左指標所指元素和基準元素對調
return i;
}
public static void swap(char[] list, int left, int right) {
char temp = list[left];
list[left] = list[right];
list[right] = temp;
}
static void Main(string[] args) {
char[] list = new char[15] { 'A', 'S', 'O', 'R', 'T', 'I', 'N', 'G', 'E', 'X', 'A', 'M', 'P', 'L', 'E' };
Console.WriteLine("Before sort");
for (int n = 0; n < list.Length; n++)
Console.Write(list[n] + " ");
quickSort(list, 0, list.Length - 1);
Console.WriteLine("\nAfter sort");
for (int n = 0; n < list.Length; n++)
Console.Write(list[n] + " ");
Console.ReadKey();
}
}
執行結果
三小俠 小弟獻醜,歡迎指教