1. 程式人生 > >C# 遞迴式快速排序演算法

C# 遞迴式快速排序演算法

  1 static void Main(string[] args)
  2         {
  3 
  4             Console.WriteLine("************快速排序*****************");
  5             int[] list = new int[] { 4, 7, 6, 5, 3, 2, 8, 1 };
  6             QuickSort qs = new QuickSort();
  7             qs.quikSort(list, 0, list.Length - 1);
  8             for
(int i = 0; i < list.Length; i++) 9 { 10 Console.WriteLine("第{0}位是{1}", i + 1, list[i]); 11 } 12 // Console.WriteLine(list); 13 14 Console.ReadKey(); 15 } 68 69 70 //遞迴快速排序法 71 public class QuickSort 72 {
73 //快速排序 74 public void quikSort(int[] arr, int startIndex, int endIndex) 75 { 76 //遞迴結束條件 startIndex>endIndex 77 if (startIndex >= endIndex) 78 { 79 return; 80 } 81 82 //得到基準元素的位置 83 int
pivotIndex = partiton(arr, startIndex, endIndex); 84 85 //根據基準元素,分成兩部分遞迴排序 86 quikSort(arr, startIndex, pivotIndex - 1); 87 quikSort(arr, pivotIndex + 1, endIndex); 88 } 89 90 private static int partiton(int[] arr, int startIndex, int endIndex) 91 { 92 //取第一個位置的元素作為基準元素 93 int pivot = arr[startIndex]; 94 int left = startIndex; 95 int right = endIndex; 96 97 while (left != right) 98 { 99 //控制right指標比較並左移 100 while (left < right && arr[right] > pivot) 101 { 102 right--; 103 } 104 105 //控制right指標比較並右移 106 while (left < right && arr[left] <= pivot) 107 { 108 left++; 109 } 110 111 //交換left和right指向的元素 112 if (left < right) 113 { 114 int p = arr[left]; 115 arr[left] = arr[right]; 116 arr[right] = p; 117 } 118 } 119 120 //pivoe和指標重合點交換 121 int s = arr[left]; 122 arr[left] = arr[startIndex]; 123 arr[startIndex] = s; 124 125 return left; 126 } 127 128 }