分治法-快速排序

简介:

问题:应用快速排序方法对一个记录序列进行生序排序(运用分治法)

策略:请读者先了解快速排序的基本概念(《数据结构》或百度百科)

如下所示是一个快速排序的完整例子:(化成中间一个数,左边的比他小,右边的比他大)

23 13 35 6 19 50 28
[19 13 6] 23 [35 50 28]
[6 13] 19 23 [28] 35 [50]
6 [13] 19 23 28 35 50
6 13 19 23 28 35 50

实现代码:

#include<stdio.h>
int r[1010]; 
int Partition(int r[],int first,int end)//划分 
{
    int i=first,j=end;//初始化待划分区间 
    while(i<j)
    {
        while(i<j&&r[i]<=r[j]) j--;//右侧扫描 
        if(i<j)
        {
               int temp=r[i];r[i]=r[j];r[j]=temp;//将较小记录交换到前面 
               i++;
        }
        while(i<j&&r[i]<=r[j]) i++;//左侧扫描 
        if(i<j)
        {
               int temp=r[i];r[i]=r[j];r[j]=temp;//将较大记录交换到后面 
               j--;
        }
    }
    return i;
}
void QuickSort(int r[],int first,int end)//快速排序 
{
     int pivot;
     if(first<end)
     {
        pivot=Partition(r,first,end);//划分,pivot是轴值在序列中的位置 
        QuickSort(r,first,pivot-1);//求解子问题1,对左侧子序列进行快速排序 
        QuickSort(r,pivot+1,end);//求解子问题2,对右侧子序列进行快速排序 
     }
} 
int main()
{
    int i,j,n,m;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    scanf("%d",&r[i]);
    QuickSort(r,0,n-1);
    for(i=0;i<n;i++)
    printf("%d ",r[i]);
    puts("");
    return 0;
}


 

相关文章
|
JSON JavaScript 前端开发
超级实用!详解Node.js中的util模块和express模块
超级实用!详解Node.js中的util模块和express模块
|
Ubuntu 安全 Linux
盘点|2021年最受欢迎Linux桌面操作系统前十名
根据各操作系统镜像站后台下载量,阿里云镜像站统计了2021年最受欢迎的Linux桌面操作系统,仅根据调用量排名,供大家参考。排位最高的还是Centos,受中国Linux用户欢迎的Ubuntu、Debian均进入了前十,国内的优麒麟操作系统排在第7位。
12123 3
|
1月前
|
网络协议
端口最多只有65535个,为什么服务器能承受百万并发
服务器通过四元组(源IP、源端口、目标IP、目标端口)识别不同TCP连接,每条连接对应独立socket。数据包携带四元组信息,服务端据此查找对应socket进行通信。只要四元组任一元素不同,即视为新连接,可创建独立socket。资源充足时,单进程可支持百万级并发连接,socket与端口非一一对应。
104 10
端口最多只有65535个,为什么服务器能承受百万并发
|
2月前
|
人工智能 监控 安全
紧急!!慎用Cursor V1.5.7版本!!!存在恶意大规模攻击用户项目文件行为
Cursor v1.5.7 利用DeepSeek 3.1的架构感知和代码能力,对用户项目文件进行多批次恶意攻击
525 12
|
7月前
|
算法
蓝桥杯16天刷题计划一一Day02
这是蓝桥杯16天刷题计划的第二天内容,由作者blue于2025年3月28日整理。当天训练重点为二分法,包含多道经典题目解析与代码实现,如有序数组查找、砍树问题、木材加工等。文章针对二分法的应用场景进行了深入讲解,并通过实例演示了如何优化算法效率,适合对二分法不熟悉的初学者学习和练习。
167 5
|
Linux Docker 容器
docker安装与加速
docker安装与加速
420 0
|
存储 Java 关系型数据库
Maven下载以及配置 一条龙全教程
Maven下载以及配置 一条龙全教程
509 0
|
12月前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
234 2
|
存储 弹性计算 云计算
阿里云服务器、物理服务器区别对比,怎么选更合适、更便宜?
随着技术的飞速发展,服务器作为数据存储和应用的核心,其选择变得尤为关键。在云计算日益盛行的今天,我们面临一个选择:传统的物理服务器与新兴的云服务器,究竟哪一个更适合我们的需求? 首先,让我们明确物理服务器的特点。它是真实的、可触摸的硬件设备,拥有独立的资源,如CPU、内存和存储空间。由于其物理独立性,它通常被用于承载较大规模、对稳定性要求极高的网站和应用。但同时,这也意味着它的成本相对较高,不仅需要购买硬件设备,还需要承担后期的维护和升级费用。
1226 0
|
机器学习/深度学习 弹性计算 编解码
阿里云服务器CPU内存带宽系统盘配置选择全流程
阿里云服务器ECS实例规格、轻量应用服务器选择,CPU内存配置选择、公网带宽以及系统盘选择攻略
595 0
阿里云服务器CPU内存带宽系统盘配置选择全流程