快排

#include <bits/stdc++.h>
using namespace std;
int n,a[100000];
void quick_sort(int a[], int l, int r) {
    if (l < r) {
        int i = l, j = r, x = a[l];
        while (i < j) {
            while (i < j && a[j] >= x) // 从右向左找第一个小于x的数
                j--;
            if (i < j)
                a[i++] = a[j];
            while (i < j && a[i] < x) // 从左向右找第一个大于等于x的数
                i++;
            if (i < j)
                a[j--] = a[i];
        }
        a[i] = x;
        quick_sort(a, l, i - 1);
        quick_sort(a, i + 1, r);
    }
}
int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
    }
    quick_sort(a, 1, n);
    for (int i = 1; i <= n; i++) {
        printf("%d\n", a[i]);
    }
}
#include <bits/stdc++.h>
using namespace std;
int n,a[100000];
void quick_sort(int l,int r)//应用二分思想
{
    //rand() % (right - left + 1) + left;
    int mid=a[rand() % (r- l+ 1) + l];
    //int mid = a[(l + r) / 2];//中间数
    int i = l, j = r;
    do {
        while (a[i] < mid) i++;//查找左半部分比中间数大的数
        while (a[j] > mid) j--;//查找右半部分比中间数小的数
        if (i <= j)//如果有一组不满足排序条件(左小右大)的数
        {
            swap(a[i], a[j]);//交换
            i++;
            j--;
        }
    } while (i <= j);//这里注意要有=
    if (l < j) quick_sort(l, j);//递归搜索左半部分
    if (i < r) quick_sort(i, r);//递归搜索右半部分
}
int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
    }
    quick_sort(1, n);
    for (int i = 1; i <= n; i++) {
        printf("%d ", a[i]);
    }
}

原文链接: https://www.cnblogs.com/Accpted/p/12837440.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    快排

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/346642

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午4:00
下一篇 2023年3月2日 上午4:01

相关推荐