C++ 详解快速排序代码

C++ 详解快速排序代码,第1张

C++ 详解快速排序代码

 **快速排序有不止一种代码实现,下面只是其中一种,仅供参考。

// 一种快排模板 必须会自己写!!
// 建议模拟一遍,便于理解,光看代码难以真正明白
#include
using namespace std;

void Quicksort(int a[], int s, int e) {// s 代表排序开始位置;e 代表排序终止位置。
    if(s>=e) return;// 保证开始位置在终止位置之前。
    int left = s, right = e;// 利用始末位置而不改变原值:所以增加两个新变量。
    int key = s;// key类似指针,开始时指向初始位置,即假设第一个数是有序的。
    while(right > left) {
        while(right > left && a[right] >= a[key])
            right--;// 必须从右边的在前面
        while(right > left && a[left] <= a[key])
            left++;// 从前面得知,key == left,如果这两行在前面,那一定会先执行这个操作,这样不行
        swap(a[left], a[right]);// swap是一个简单的交换函数(偷下懒qaq)
    }// lefe == right 时跳出while循环
    // 如果不能理解建议在自己手画模拟一遍
    swap(a[key], a[left]);// 以此时的a[left] 为分界线,前面的数一定比a[left]小,后面的一定比a[left]大
    // 再运用递归将a[left]前面的和后面的分别排好序
    Quicksort(a, s , left-1);
    Quicksort(a, left+1 ,e );
}
int a[500];
int main()
{
    int n;
    while(cin >> n){
        for(int i = 0; i < n; i++)
            cin >> a[i];
        Quicksort(a, 0, n - 1);
        for(int i = 0; i < n; i++)
            cout << a[i] << " ";
        cout << endl;
    }
    return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5713488.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存