文章

15

粉丝

142

获赞

25

访问

13.1k

头像
快速排序 - 西工大 题解:
P1716 西北工业大学机试题
发布于2023年5月4日 18:38
阅读数 688

#include <iostream>

using namespace std;

const int N = 100010;

int q[N];  // 定义数组

void quick_sort(int q[], int l, int r) {  // 定义快速排序函数
    if (l >= r) return;  // 如果左边界大于等于右边界,直接返回

    int i = l - 1, j = r + 1, x = q[l + r >> 1];  // 初始化左右指针和中间值
    while (i < j){  // 当左指针小于右指针时循环
        do i++; while (q[i] < x);  // 从左向右找到第一个 q[i] >= x 的位置
        do j--; while (q[j] > x);  // 从右向左找到第一个 q[j] <= x 的位置
        if (i < j) swap(q[i], q[j]);  // 如果左指针不大于右指针,则交换 q[i] 和 q[j]
    }

    quick_sort(q, l, j);  // 对左半部分继续排序
    quick_sort(q, j + 1, r);  // 对右半部分继续排序
}

int main(){
    int n;
    scanf("%d", &n);  // 输入数组长度

  &nb...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发