快速排序算法-----数据结构

大话数据结构系列之快速排序算法 文章目录实现思路重点知识代码实现优化策略算法比较与各位共勉 实现思路 1、属于冒泡排序的升级版,都是通过不断的比较和移动交换来实现排序,它的实现,增大了记录的比较和移动的距离,将关键字较大的记录从前面直接移动到后面,关键字较小的记录从后面直接移动到前面,从而减少了总的比较次数和移动交换次数。 2、通过一趟排序将待记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这... 阅读详情

快排基本思想:

        在待排序的n个元素中任取一个元素(通常取第一个元素)作为基准,把该元素放入最终的位置上 (即归位一个元素),数据序列被此元素划分成俩部分:所有关键子比该元素关键字小的元素放置在前一部分,所有比它大的元素放置在后一部分,这个过程称作一趟排序。以后对所有的俩部分分别重复上述过程,直至每部分内只有一个元素或空为止。简而言之,每趟使表的第一个元素放入适当位置,将表一分为二,对子表按递归方式继续这种划分,直至划分的子表的长度为1或0。

测试用例:

        1.排好序的数组;

        2.随机数组。

程序代码:

QuickSort.h:

#pragma once
#include<stdio.h>
typedef int RecType;
void QuickSort(RecType arr[],int start,int tail);

QuickSort.c:

#include "QuickSort.h"


//QuickSort函数
void QuickSort(RecType arr[],int start,int tail){
    int i = start;
    int j = tail;
    RecType tmp = arr[i];
    if(i<j){
        while(i!=j){
            while(j>i&&arr[j] > tmp){//从右向左找到第一个小于tmp的值
                --j;
            }
            arr[i] = arr[j];
            while(i<j && arr[i] < tmp){//从左向右找到第一个大于tmp的值
                ++i;
            }
            arr[j] = arr[i];
        }
        arr[i] = tmp;
        QuickSort(arr,start,i-1);//对左区间递归排序
        QuickSort(arr,i+1,tail);//对右区间递归排序
    }
}

测试用例代码:

//主函数
int main(){
    RecType arr[] = {0,1,2,3,4,5};
    QuickSort(arr,0,5);
    int i = 0;
    printf("排序前:");
    for(;i<6;++i){
        printf("%d ",arr[i]);
    }
    printf("\n");
    printf("排序后:");
    i = 0;
    for(;i<6;++i){
        printf("%d ",arr[i]);
    }
    printf("\n");
    RecType arr1[] = {3,9,2,5,4,8};
    QuickSort(arr1,0,5);
    i = 0;
    printf("排序前:");
    for(;i<6;++i){
        printf("%d ",arr1[i]);
    }
    printf("\n");
    printf("排序后:");
    i = 0;
    for(;i<6;++i){
        printf("%d ",arr1[i]);
    }
    printf("\n");
    return 0;
}

结果显示:


408考研之数据结构的排序——快速排序的算法 快速排序代码 阅读详情

相关推荐

分治算法的设计与实现

第1关:快速排序 在待排序的n个元素中任取一个元素(通常取第一个元素)作为基准,把该元素放入最终位置后,整个数据序列被基准分割成两个子序列,所有小于基准的元素放置在前子序列中,所有大于基准的元素放置在后子序列中,并把基准排在这两个子序列的中间,这个过程称作划分。 //快速排序算法 #include <stdio.h> #include <stdlib.h> void disp(int a[],int n) //输出a中所有元素 { int i; for (i=0;i<n;i

Junds0的博客 312

计算机算法设计与分析——复习题

1.快速排序 例题:对数组A={15,29,135,18,32,1,27,25,5},用快速排序方法将其排成递增序列。简要回答快速排序的思想和上述数组的排序过程。 基本思想   在待排序的n个元素中任取一个元素(通常取第一个元素)作为基准,把该元素放入最终位置后,整个数据序列被基准分割成两个子序列,所有小于基准的元素放置在前子序列中,所有大于基准的元素放置在后子序列中,并把基准排在这两个子序列的中...

qq_44691784的博客 2530

快速排序原创数据(20组)

数据范围较大,可能会超时。我自测时限时1秒只过了15个点。看看你们谁可以全过。

用分治法来解决排序问题(快速排序,归并排序)

一、快速排序 (1)基本思想 在待排序的n个元素中任取一个元素(通常取第一个元素)作为基准,把该元素放入最终位置后,整个数据序列被基准值分割成两个子序列,所有小于基准值的元素放置在前子序列中,所有大于基准值的元素放置在后子序列中,并把基准值排在这两个子序列的中间,这个过程称作划分。 然后对两个子序列分别重复上述过程,直至每个子序列内只有一个记录或空为止。 关键在于划分 (2)算法 int ...

wmy01234的博客 4909

告别手动改代码!用SSC工具5分钟搞定EtherCAT从站动态模块配置(含Excel模板)

本文详细介绍了如何利用SSC工具和Excel模板实现EtherCAT从站动态模块配置的自动化流程。通过零代码修改的动态配置方案,大幅提升工业自动化产线的灵活性和效率,配置时间从平均4小时缩短至8分钟,错误率下降96%。文章包含Excel模板设计、实战演示和避坑指南,助力工程师快速掌握这一高效工具。

weixin_28339967的博客 571

【Audio driver】深入解析mixer_paths.xml中的音频通路配置

本文深入解析了Android音频驱动开发中的核心配置文件mixer_paths.xml。文章以高通平台为例,详细阐述了音频通路(FE、BE、DSP、Device)的概念与连接逻辑,并通过实战案例拆解了扬声器与麦克风通路的配置方法、关键控件作用及调试技巧,是理解与定制Android音频系统的实用指南。

ik6789012的博客 358

内部排序笔记

数据结构-排序-笔记

byun0223的博客 787

从0开始,部署micro_ros+stm32f407+stm32cubeIDE

(5)安装依赖项rosdep时,必须处于创建的microros_ws中,因为里面有clone的src文件夹。(3)教程a中的安装docker不是必须的,取决于运行agent时是否想使用docker。(4)记得安装rosdep,并在以后的命令中将rosdep替换为rosdepc。4、运行agent,选择udp、tcp、can、串口,这里没有使用docker。(1)首先参考教程a安装虚拟机和ubuntu,注意版本选择22.04;(2)参考教程b部署micro_ros构建系统。二、安装和运行agent。

m0_37963053的博客 2234

排序

木头的博客 235

交叉熵损失函数基本概念及公式

对于二分类问题,模型的输出通常是一个标量,表示样本属于正类的概率。因此,在二分类的交叉熵损失函数中,我们只需要考虑一个概率值,即模型预测为正类的概率。具体来说,当真实标签为1时,我们关注模型预测为正类的概率;当真实标签为0时,我们关注模型预测为负类的概率。因此,二分类的交叉熵损失函数可以表示为:其中,y 表示真实标签,取值为 0 或 1;p 表示模型预测为正类的概率。而对于多分类问题,模型的输出通常是一个向量,表示样本属于各个类别的概率。因此,在多分类的交叉熵损失函数中,我们需要考虑所有类别的概率。

qlkaicx的博客 1万+

KNX实战—ETS5_智能开关从零到一的配置全流程

本文详细介绍了使用ETS5软件配置KNX智能开关的完整流程。从创建项目、构建建筑结构,到导入产品数据库、添加并配置开关模块与智能面板,再到设置延时开关、闪烁报警等进阶功能,并深入解析了群组地址的配置与链接方法。最后指导完成项目校验与程序下载,帮助用户实现从零到一的智能灯光基础控制功能配置。

joy55的博客 543

数据结构中数组的快速排序算法

— 选择一个基准值(pivot),将数组分成两部分,左边都比基准小,右边都比基准大,然后递归处理左右两部分。

weixin_67377649的博客 719

踩坑实录:C#上位机YOLOv11从2FPS到45FPS,ONNX Runtime GPU加速全解析

算力迁移:将推理核心从CPU迁移至GPU(核心提速手段);内存复用:避免重复分配/释放内存,减少GC压力;维度固定:工业场景固定输入分辨率,关闭动态维度;资源限制:合理限制GPU/CPU/内存占用,避免资源耗尽;解耦设计:推理线程与UI线程解耦,避免跨线程问题。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 573

数据结构排序之快速排序算法

在排序中快速排序是在冒泡排序的基础上进行算法优化而得出的,很大程度上见减小了冒泡排序的时间复杂度。可以说快速排序算法无愧于它的名字,高速高效。 接下来将介绍快速排序的思想以及相应算法 快速排序 快速排序的思想其实很简单,其实就是分治思想。大概的意思是在一组数中以一个数为基准,讲比它的数扔到它的两边,将小的扔到它的左边,将比它大的扔到它的右边(以升序为例),并持续这种操作,进而实现排序的目的。...

qq_42057046的博客 1万+

ROS2入门到精通—— ROS2实战专栏(实时更新)

Nav2专栏介绍

BigDavid123的博客 2372

数据分析必问:Pandas面试题及参考答案

DataFrame是Pandas库中的一个核心数据结构,它类似于Excel中的表格,可以存储不同类型的数据。在Pandas中,抽样操作通常很简单,但是需要根据数据的特点和分析的需求来选择合适的抽样方法。数据标准化和归一化是数据预处理中常用的技术,目的是将数据调整到一个合适的范围内,以消除不同特征量纲和数值范围的差异,从而保证模型训练的有效性。CSV文件是一种文本文件,其中的数据以逗号分隔。不平衡数据集指的是数据集中各类别样本的数量差异较大的情况,这可能导致模型训练出现偏差,影响模型的泛化能力。

大模型大数据攻城狮的专栏 3009

数据结构与算法之快速排序

(Quick Sort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。2、重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。3、递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

2401_83641443的博客 694

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

数据结构严蔚敏版快速排序算法c语言实现

//严蔚敏数据结构快速排序算法c语言实现 #include typedef int InfoType; /* 定义其它数据项的类型 */ /* c10-1.h 待排记录的数据类型 */ #define MAXSIZE 20 /* 一个用作示例的小顺序表的最大长度 */ typedef int KeyType; /* 定义关键字类型为整型 */ typedef struct { KeyType

云守护的专栏 9799

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Python算法与数据结构——快速排序

快速排序

weixin_74165584的博客 359

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

数据结构实验——实现希尔排序的算法、实现快速排序的算法、实现堆排序的算法

partition(RecType R[],ints,int t):对 R[s..]元素进行一趟划分(以该区间中第一个元素为基准)。·Sift(RecType R[],int low,int high):对R[low .. high」进行堆筛选的算法。·QuickSort(RecType R[],int s,intt):对 R[s..]的元素进行递增快速排序。·disppart(RecType R[],ints,int t):显示 R[s..t]划分后的结果。

u014114223的博客 1239

C语言数据结构-快速排序算法

本文介绍了快速排序算法的实现原理与代码实现。快速排序采用分治策略,通过选取基准元素将数组划分为两部分,再递归排序。重点解析了分区函数的工作原理:使用双指针遍历数组,将小于基准的元素交换到左侧,最终确定基准位置。文中提供了完整的C语言实现代码,包括分区函数、递归排序函数和辅助函数。快速排序平均时间复杂度为O(nlogn),通过优化策略可避免最坏情况,是分治算法的典型应用。理解该算法对掌握算法设计思想具有重要意义。

June_Swift的博客 555

Python算法与数据结构——快速排序、堆排序、归并排序

快速排序、堆排序、归并排序

weixin_74165584的博客 3164

JAVA数据结构与算法之快速排序

前言 最近面临毕业就业,在复习数据结构与算法,为了更好地掌握,加深印象,所以决定写一些博客来知识复现。 温馨提示:这篇博客可能不适合刚学数据结构的新手。 算法的简单介绍 快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两 部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排 序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 代码实现 package sjjg; public class Q

iCanCode的博客 265

java数据结构和算法——快速排序算法

一、快速排序算法介绍 快速排序(Quicksort)是对冒泡排序的一种改进。 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 二、快速排序算法示意图 三、快速排序算法的应用实例需求 对 [-9,78,0,23,-567,70] 进行从小到大的 排序,要求使用快速排序法。并测试测试100万条数据排序耗时。 四、 ...

小志的博客 526

《数据结构与算法》实验报告——快速排序

《数据结构》实验报告 学号: 2018329621200 机器号 10-414-28 姓名: 申屠志刚 日期: 2019/12/18 程序名: main.cpp 实验内容: 快速排序 目的和要求(需求...

无限迭代中...... 5220
上一篇: 机器人的运动范围-----数据结构
下一篇: 归并排序-----数据结构
CYD、孤狼
博客等级 码龄9年 24粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值