编程语言
首页 > 编程语言> > C++算法——快速排序

C++算法——快速排序

作者:互联网

算法思想:

算法模板:

 1 void quick_sort(int q[], int l, int r)
 2 {
 3     //递归的终止情况
 4     if(l >= r) return;
 5     //第一步:分成子问题
 6     int i = l - 1, j = r + 1, x = q[l + r >> 1]; 
 7     while(i < j)
 8     {
 9         do i++; while(q[i] < x);
10         do j--; while(q[j] > x);
11         if(i < j) swap(q[i], q[j]);
12     }
13     //第二步:递归处理子问题
14     quick_sort(q, l, j), quick_sort(q, j + 1, r);
15     //第三步:子问题合并.快排这一步不需要操作,但归并排序的核心在这一步骤
16 }

例题:

给定你一个长度为 nn 的整数数列。

请你使用快速排序对这个数列按照从小到大进行排序。

并将排好序的数列按顺序输出。

输入格式
输入共两行,第一行包含整数 nn。

第二行包含 nn 个整数(所有整数均在 1∼1091∼109 范围内),表示整个数列。

输出格式
输出共一行,包含 nn 个整数,表示排好序的数列。

数据范围
1≤n≤1000001≤n≤100000

输入样例:
5
3 1 2 4 5
输出样例:
1 2 3 4 5

#include<bits/stdc++.h>

using namespace std;
const int N = 100010;

int n;
int q[N];

void quick_sort(int a[], int l, int r)
{
    if (l >= r) return;
    
    int i = l - 1, j = r + 1;
    int num = a[l + r >> 1];

    while(j > i)
    {
        do i ++; while(a[i] < num);
        do j --; while(a[j] > num);
        if (i < j) swap(a[i], a[j]);
    }

    quick_sort( a, l, j);
    quick_sort( a, 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;
}

 2022-03-27 23:02:39

标签:sort,do,数列,int,while,C++,算法,quick,排序
来源: https://www.cnblogs.com/hhlmc/p/16209812.html