0
点赞
收藏
分享

微信扫一扫

数据结构与算法模板

三次方 2022-01-25 阅读 58

初级数据结构与算法模板

本人蒟蒻一枚,希望和本站对c语言感兴趣的小伙伴共同学习。
接下来就让我们开始我们第一篇文章吧。

快速排序

快速排序这个东西,刷题遇到的不太多,几乎都是我们直接sort。
但是这个手写的快速排序,面试官以及笔试时候出现次数很多,所以我们在这里给大家带来这篇快速排序的代码模板。

首先我们先看一下这道题洛谷P1177

题目描述

利用快速排序算法将读入的 NN 个数从小到大排序后输出。

快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++ 选手请不要试图使用 STL,虽然你可以使用 sort 一遍过,但是你并没有掌握快速排序算法的精髓)。
代码具体粘贴如下

具体代码

数组q[],左边界l,右边界r,值x,i左侧指针,j右侧指针

1.确定分界点:q[l],q[r],q[(l+r)/2],随机 都是可以的

2.调整区间:使得左边<= x,右边>= x

3.递归实现左右两段

#include <iostream>

using namespace std;

const int N = 1e6 + 10int n;

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);

		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 ()
{
    scanf ("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf ("%d", &q[i]);
    }
	quick_sort (q, 0, n - 1);
    for (int i = 0; i < n; i++)
    {
        printf ("%d ", q[i]);
    }
    return 0;
}

解释一下这里为什么用do while 而不是while ,当然每个人的写法不同,用while 也是可以,只是个人认为do while比较省事(就是懒,能省则省哈哈)无论如何都执行一次的特性,所以使用了do while,但是无论黑猫白猫,抓到老鼠就是好猫。
最后还是感谢大家耐心观看,如果对您有一点帮助的话,请给点个赞吧。

举报

相关推荐

0 条评论