- /// <summary>
- /// 升序快速排序
- /// </summary>
- /// <param name="ia"></param>ia 是要进行排序的数组,
- /// <param name="low"></param>
- /// <param name="high"></param>low和high分别记录数组中需要排序的的区间的下限索引和上限索引
- static void QuickSort(int[] ia, int low, int high)
- {
- int l = low, h = high; //将l,h记录low 和 high 后续中将会用到l 和 h游标
- int pos = l; //pos 用来记录需要进行定位的元素的索引,初始化为l,即从最低索引开始定位;
- int temp = ia[l]; //temp用来记录定位元素的值,初始化为ia[l];
- while (l != h) // 当l和h不相等时,意味着元素可能还没有定位成功
- {
- while (h > l)//先在上游元素中进行定位,如果发现上游有比要定位元素值小的,进行换位。
- {
- if (temp > ia[h])
- {
- ia[l] = ia[h];
- pos = h;
- l++;
- break;
- }
- h--;
- }
- while (l < h)//然后在下游元素中进行定位,如果发现下游中有比要定位元素大的,进行换位.
- {
- if (temp < ia[l])
- {
- ia[h] = ia[l];
- h--;
- pos = l;
- break;
- }
- l++;
- }
- if (l == h) //如果l和h相等,意味着定位元素已经成功定位。
- {
- ia[pos] = temp;
- }
- }
- if ((pos - 1) > low)//对定位的位置左边的区间进行递归
- {
- QuickSort(ia, low, pos - 1);
- }
- if (pos + 1 < high)//对定位的位置右边的区间进行递归
- {
- QuickSort(ia, pos + 1, high);
- }
-
- }
复制代码 |