关于算法:快速排序模板

32次阅读

共计 594 个字符,预计需要花费 2 分钟才能阅读完成。

1. 思维


2. 代码

#include<iostream>
using namespace std;

const int N = 1e6 + 10;
int q[N];
int n;

void quick_sort(int q[], int l, int r){if(l >= r)
        return;
        
    // 确定分界点
    int x=q[(l+r)/2], i=l-1, j=r+1;
    
    // 调整区间
    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(){
    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++)
        cout << q[i] << ' ';
    return 0;
}

3. 调试

4. 模板

void quick_sort(int a[], int l, int r){if(l >=  r)
        return;
    int x=q[(l+r)/2], i=l-1, j=r+1;
    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);
}

正文完
 0