[C#] 快速排序法(Quick Sort)

  • 12542
  • 0

[C#] 快速排序法(Quick Sort)

Introduction

快速排序法也把資料不停的分成兩堆,但不是等分,而是與選定的元素比大小來決定,所以快速排序法比大小在前,合併排序法比大小在後。

 

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();
        }
    }

 

執行結果

2010-05-03_221151

三小俠  小弟獻醜,歡迎指教