首页 > 其他分享 >快速排序

快速排序

时间:2023-06-29 22:07:45浏览次数:34  
标签:sort 数列 int 整数 quick 排序 快速

JWvFczgRNg.jpg

题目

给定你一个长度为 $n$ 的整数数列。 请你使用快速排序对这个数列按照从小到大进行排序,并将排好序的数列按顺序输出。

输入格式 输入共两行,第一行包含整数 $n$ 。 第二行包含 $n$ 个整数(所有整数均在 $1∼109$ 范围内),表示整个数列。

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

数据范围 $1≤n≤100000$ 输入样例:

5
3 1 2 4 5

输出样例:

1 2 3 4 5

思路

快速排序的基本思路:

  1. 寻找一个中间值, x = a[l]/a[r]/a[l + r >> 1]
  2. 使得 $x$ 左侧值 $<=privot$ , 右侧值 $>=privot$
  3. 然后继续排序左侧区间及右侧区间

代码

#include <iostream>

using namespace std;

const int N = 100010;
int n, a[N];

void quick_sort(int l, int r)
{
    if (l >= r) return;
    int x = a[l + r >> 1];
    int i = l - 1, j = r + 1;  // i, j作为分界点 a[l...j - 1] <= x; a[j...l] >= x
    while (i < j)
    {
        do i ++ ; while (a[i] < x);
        do j -- ; while (a[j] > x);
        
        if (i < j) swap(a[i], a[j]);
    }
    
    quick_sort(l, j), quick_sort(j + 1, r);
}

int main()
{
    cin >> n;
    for (int i = 0; i < n; i ++ ) scanf("%d", &a[i]);
    
    quick_sort(0, n - 1);
    
    for (int i = 0; i < n; i ++ ) printf("%d ", a[i]);
}

标签:sort,数列,int,整数,quick,排序,快速
From: https://blog.51cto.com/u_16170343/6585745

相关文章

  • 【数据结构】选择排序 与 堆排序
    ☑️前言......
  • 学不会的排序算法
    什么是排序所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法的评价标准(1)时间复杂度(2)空间复杂度(3)排序方式(4)稳定性废话不多说,我们直接开始吧选择排序选择排序(Selectionsort)是一种......
  • MongoDB聚合操作之排序、分页
    聚合操作之排序、分页管道命令之$sort$sort用于将输入的文档排序后输出使用示例如下:查询人物,按照年龄升序db.person.aggregate([{$sort:{age:1}}])查询每个国家的人数,并排序db.person.aggregate([{$group:{_id:"$country",counter:{$sum:1}}},{$sort:{count......
  • JS sort排序方法
    Array.prototype.sort()sort()方法就地对数组的元素进行排序,并返回对相同数组的引用。默认排序是将元素转换为字符串,然后按照它们的UTF-16码元值升序排序。由于它取决于具体实现,因此无法保证排序的时间和空间复杂度。尝试一下constmonths=['March','Jan','Feb','Dec'......
  • 带头结点单链表插入,删除,查找与排序实现一个简单的基于链表结构的学生管理系统
    链表结构和操作方法////CreatedbyAdministratoron2023/6/12.//#ifndefCODE_LINKEDLIST_H#defineCODE_LINKEDLIST_H#include<iostream>#include<cstring>#include<stdlib.h>#include"student.h"typedefstructlink_list{//......
  • MATLAB代码:分布式最优潮流 本文以全局电压的低成本快速控制为目标,提出基于电气距离和
    MATLAB代码:分布式最优潮流关键词:网络划分;分布式光伏;集群电压控制;分布式优化;有功缩减参考文档:《含分布式光伏的配电网集群划分和集群电压协调控制》仿真平台:MATLAB主要内容:本文以全局电压的低成本快速控制为目标,提出基于电气距离和区域电压调节能力的集群综合性能指标和网络划分......
  • 如何用低代码开发平台快速实现单据打印功能?
    每家企业在日常工作中,业务流转时,都经常需要在线打印各种纸质文件,如凭证、采购单、出入库单据、销售合同等,不同企业都有个性化的排版要求,每一次需要在固定文档模板的基础上重新填充业务数据,过程中难免会遇到数据错漏、耗时费力等问题。事实上,虽然“无纸化办公”正在成为企业信息化......
  • Python Flask - 快速构建Web应用详解
    本文将详细探讨PythonFlaskWeb服务。我将首先简单介绍Flask,然后将逐步进入Flask中的路由、模板、表单处理以及数据库集成等高级概念,目标是能够让大家了解并掌握使用Flask来创建动态Web应用的技巧。1.Flask简介Flask是一个轻量级的Web服务器网关接口(WSGI)web应用框架。它被设计......
  • SpringBoot 2 种方式快速实现分库分表,轻松拿捏!
    大家好,我是小富~(一)好好的系统,为什么要分库分表?(二)分库分表的21条法则,hold住!本文是《分库分表ShardingSphere5.x原理与实战》系列的第三篇文章,本文将为您介绍ShardingSphere的一些基础特性和架构组成,以及在Springboot环境下通过JAVA编码和Yml配置两种方式快速实现分库......
  • 光脚丫学LINQ(003):排序结果集
    视频演示:http://u.115.com/file/f2e2959888 通常可以很方便地将返回的数据进行排序。orderby子句将使返回的序列中的元素按照被排序的类型的默认比较器进行排序。例如,下面的查询可以扩展为按Name属性对结果进行排序。因为Name是一个字符串,所以默认比较器执行从A到Z的字母......