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     }

猜你喜欢

转载自www.cnblogs.com/pushYYL/p/9921793.html