快速排序思想:找出一个数作为基准,比这个数小的放在左边,大的放在右边,分完一次后左边的数再做一次上述操作,右边的同理,直到排出顺序为止。

 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         }

 

posted on 2018-02-01 00:36  马MZJ  阅读(166)  评论(0编辑  收藏  举报