快速排序

`/*
快速排序的分治思想:
1.确定分界点 第一个q[l],中间q[l+r>>1],随机q[r]都可以
2.调整这两个区间, 所有<=x 在左边, >= x 在右边
3.递归处理,给两个区间排序

实现:
(1)暴力法:开两个数组,单独存
(2)*优美法:两个指针分别从两边移动,直至相遇/穿过

*/

include

using namespace std;
const int n = 1e6 * 10; //n = 10的6次方
int q[n];
void quick_sortint (q[], int l, int r){
int x = q[l + r >> 1] //x=中间的数
int i = l - 1, j = r + 1; //i和j分别指向数组两边边界
if(r == l) return;//出口,当两个指针重合时
while(i < j){
do i ++;
while(q[i] < x);//如果位置对,让指针往后移动一位
do j --;
while(q[j] > x);//如果位置对,让指针往前移动一位
if(i < j) swap(q[i], q[j]); //位置不对,交换位置(两个指针都停下来的情况下)
}

//递归处理左右两段
    quick_sort(q, l, j);
    quick_sort(q, j + 1, r);

}

int main(){
int n;
cin >> n;
for(int i = 0;i < n; i ++){
cin >> q[i];
quick_sort(q, 0, n - 1){
for(int i = 0; i < n; i ++)
couy << q[i] << " ";
}
}
return 0;

}`

上一篇:几道简单的链表题


下一篇:Qt小知识 | 用一篇小短文,带你进入 QML 的美妙世界