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

快速排序

时间:2023-07-31 20:13:08浏览次数:33  
标签:sort 10 arr int 基准 quick 排序 快速

主要思想:分治
关键步骤:

  1. 确定分界点:创建一个数组q,在数组中选一个基准数(通常为数组第一个),x=q[left],q[(left+right)/2],q[right].
    2.调整区间:把比基数(x)小的数放在左边,比基数大的数放在右边。
    3.递归处理左右两段,不断递归直至排序完成。
    例如:1. 6为基准数,设i,j为两哨兵,目前指向首尾两个数(加粗部分),6 1 2 7 9 3 4 5 10 8
    2. 两哨兵分别走向对方,直到遇到交换条件,并做交换。
    6 1 2 7 9 3 4 5 10 8
    6 1 2 5 9 3 4 7 10 8
    3. 此时来观察交换后的队列,除去基准数,是不是哨兵走过的位置都已部分有序了呢? 左边1 2 5都比基准数小,右边7 10 8都比基准数大。
    4. 然后继续执行,直至左右两边相遇。
    6 1 2 5 9 3 4 7 10 8
    6 1 2 5 4 3 9 7 10 8
    6 1 2 5 4 3 9 7 10 8
    3 1 2 5 4 6 9 7 10 8
    5.i等于j时,交换两数,之后基准数两边不断递归就排序完成。
    `
    C++代码如下:

include

using namespace std;
//根据题目要求设置数组大小
const int N=1e5;
int p[N];

void quick_sort(int p[],int l,int r)
{
//设置基准数x,左边的哨兵i,右边的哨兵j;
int x=p[l],i=l-1,j=r+1;
//如果左边大于等于右边说明数只有一个或者没有;
if(l>=r) return;
while(i<j){
do i++;while(p[i]<x); //左边不断向右,跟基准数比较
do j--;while(p[j]>x); //右边边不断向左,跟基准数比较
if(i<j) swap(p[i],p[j]); //两数进行交换,这里用到了swap函数。也可以写成
//if(i<j)
//{ int temp =p[i];
// p[i]=p[j];
// p[j]=temp;
//}
}
//基数左,右两边的数不断递归,直至i等于j时停止递归;
quick_sort(p,l,j);
quick_sort(p,j+1,r);
}

int main()
{
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&p[i]);
}
//将数传入quick_sort函数中;
quick_sort(p,0,n-1);
for(i=0;i<n;i++){
//排完序后打表输出;
printf("%d ",p[i]);
}
return 0;
}
`

另一种方法利用qsort
C代码如下:
`

include<stdio.h>

include<stdlib.h>

int cmp(const void* a, const void* b)
{
return (int)a - (int)b;
}
int main()
{
long int n, arr[100000], i;
scanf("%ld", &n);
for (i = 0; i < n; i++) {
scanf("%ld", &arr[i]);
}
qsort(arr, n, sizeof(arr[0]), cmp);
for (i = 0; i < n; i++) {
printf("%ld ", arr[i]);
}
}

`
本人蒟蒻,如有错误或者不当的地方还望指点,感谢观看我的博客

标签:sort,10,arr,int,基准,quick,排序,快速
From: https://www.cnblogs.com/expect-999/p/17594345.html

相关文章

  • flask快速上手
    目录1flask介绍fastapiflaskwsgirefWerkzeug2显示用户小案例1flask介绍#python界的web框架 -Django:大而全,快速开发,公司内部项目-Flask:小而精,不具备web开发好多功能,丰富的第三方插件-FastApi:异步框架,主要为了做前后端分离接口-Sanic:异步框架,只支持python3......
  • SHFB:为 .NET 类库快速生成说明文档
    SHFB全称SandcastleHelpFileBuilder,项目地址:https://github.com/EWSoftware/SHFB。它使用代码中的xml注释生成说明文档。因此,使用SHFB之前要给代码编写好xml注释。安装进入项目的GithubRelease页面:https://github.com/EWSoftware/SHFB/releases下载最新发行版本,SHFB......
  • HTML 快速301到其他页面
    要实现HTML页面以最快速度执行301跳转到其他页面,您可以在`<head>`部分使用`http-equiv`属性与`refresh`实现。以下是一个示例HTML文件,该文件会立即执行301永久重定向到指定URL:```html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv=&qu......
  • 网络故障监测终端帮助用户快速定位
    RTU5028E网络故障监测终端是一款功能强大的设备,它集合了断网、断电、网线故障报警功能,可同时监测多达7台网络设备。这款终端还具备自动重启和远程重启网络设备功能,能够帮助用户快速定位远程网络设备离线的原因。该终端可通过局域网连接配置软件进行配置,方便用户进行设置。此外,用户......
  • java常见的排序算法(冒泡排序、选择排序、插入排序、shell排序、归并排序、堆排序、快
    文章目录一、冒泡排序1、效率表现和适用范围2、算法实现二、选择排序1、效率表现和适用范围2、算法实现三、插入排序1、效率表现和适用范围2、算法实现四、shell排序1、效率表现和适用范围2、算法实现五、归并排序1、效率表现和适用范围2、算法实现六、快速排序1、效率表现和适用......
  • 快速上手StarRocks
    StarRocks简介StarRocks(前身为Doris)是新一代极速全场景MPP数据库StarRocks高效支持实时数据分析用户可使用StarRocks构建大宽表、星型模型、雪花模型等多种模型快速上手,兼容MySQLProtocol,对现有研发人员非常友好注:MPP数据库:MassivelyParallelProcessing大规模并行处理......
  • 怎么学习C语言,才能快速掌握?
    有多年软件行业经验,期间参与过多个C语言项目。要掌握一门编程语言,仅仅投入时间学习是不够的,关键在于实际项目经验。在没有真正实战经验之前,不宜轻易声称掌握某种编程语言,因为编程是积累性的工作,理论知识重要但实践更为关键。学习任何编程语言都需要先掌握理论基础,然后通过项目实战......
  • 【九】DRF之过滤排序异常
    【一】过滤(Filtering)对于列表数据可能需要根据字段进行过滤我们可以通过添加django-fitlter扩展来增强支持。pipinstalldjango-filter在配置文件中增加过滤后端的设置:INSTALLED_APPS=[...'django_filters',#需要注册应用,]REST_FRAMEWORK={......
  • python 快速创建大文件
    Python快速创建大文件在处理大数据集时,我们有时需要创建大文件进行测试、模拟或其他目的。Python作为一门功能丰富且易于上手的语言,提供了多种方法来快速创建大文件。本文将介绍几种常用的方法,并提供相应的代码示例。方法一:使用os模块写入随机数据importosdefcreate_large_f......
  • 快速幂
    当幂指数很大的时候,线性可能也会超时intqpow(inta,intb,intp){intans=1;a=a%p;while(b){if(b&1)ans=ans*a%p;//不能写成ans*=a,不知道原因,反正会waa=a*a%p;b>>=1;}retur......