快速排序思想:找出一个数作为基准,比这个数小的放在左边,大的放在右边,分完一次后左边的数再做一次上述操作,右边的同理,直到排出顺序为止。
1 /// <summary> 2 /// 快速排序 3 /// </summary> 4 /// <param name="data">要排序的数组</param> 5 /// <param name="L">要排序位置的的最左边的左索引</param> 6 /// <param name="R">要排序位置的最右边的的右索引</param> 7 static void IsortKS(int[] data, int L, int R) 8 { 9 if (L < R) 10 { 11 int mid = data[L];//基准数 12 int i = L; 13 int j = R; 14 for (; i < j;) 15 { 16 for (; i < j;)//从后往前找一个小的 17 { 18 if (data[j] < mid) 19 { 20 data[i] = data[j]; 21 break; 22 } 23 else 24 { 25 j--; 26 } 27 } 28 for (; i < j;)//从前往后找一个大的 29 { 30 if (data[i] > mid) 31 { 32 data[j] = data[i]; 33 break; 34 } 35 else 36 { 37 i++; 38 } 39 } 40 } 41 data[i] = mid;//当i=j的时候说明已经找到中间点,所以把基准数放在中间点 42 IsortKS(data, L, i - 1); 43 IsortKS(data, i + 1, R); 44 } 45 }