复习一下 浓缩一下
http://blog.csdn.net/morewindows/article/details/6684558这篇文章是必看的
例:72 6 57 88 60 42 83 73 48 85
只需要挖72,然后从85开始向前找一个比72小的,放到72,挖出新坑,从6开始找比大的,找到再挖出新坑,循环即可,直到左右标记位相遇。这样就是完成一次。
然后再对72左边和右边的区间递归,递归终止的条件是要递归的区间中只有一个数。
- //快速排序
- void quick_sort(int s[], int l, int r)
- {
- if (l < r)
- {
- //Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
- int i = l, j = r, x = s[l];
- while (i < j)
- {
- while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
- j--;
- if(i < j)
- s[i++] = s[j];
- while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
- i++;
- if(i < j)
- s[j--] = s[i];
- }
- s[i] = x;
- quick_sort(s, l, i - 1); // 递归调用
- quick_sort(s, i + 1, r);
- }
- }
点评代码:1.如何实现先从右找,找到了再换左找呢?他是放置了一右一左两个while。
2.最后坐标相遇,把初始挖的值放到最后坑位中
3.最后进行左右递归
快速排序搞定!开开心心去面试了!