首页 > 其他分享 >快速排序代码实现

快速排序代码实现

时间:2024-05-16 09:29:40浏览次数:27  
标签:arr int 代码 left 排序 快速 基准 指针

代码如下:

 1 #include<stdio.h>
 2 //快速排序函数,形参列表为数组,左指针位置,右指针位置,int *arr等价于int arr[]
 3 void QkSort(int *arr, int left, int right){
 4     if (left > right)  //左指针位置必须大于右指针位置
 5     {
 6         return;
 7     }
 8     //变量tmp为基准数,在此规定基准数为序列的第一个数,即左指针指向的数
 9     int tmp = arr[left];
10     int i = left; //左指针
11     int j = right;   //右指针
12     //外循环,直到左指针和右指针相等时退出,表示根据当前基准数以完成当前序列排序
13     while (i != j)
14     {   //内循环1,寻找到比基准数小的数时退出循环,此循环控制右指针
15         while (arr[j] >= tmp && j > i)
16         {
17             j--;
18         }
19         //内循环2,寻找到比基准数大的数时退出循环,此循环控制左指针
20         while (arr[i] <= tmp && j > i)
21         {
22             i++;
23         }
24         //经过以上两个内循环后,此时的左指针和右指针分别指向了
25         //比基准数小和比基准数大的数
26         //接下来要将这两个指针的数据进行交换
27         if (j > i)//交换前判断右指针是否大于左指针
28         {
29             int t = arr[i];
30             arr[i] = arr[j];
31             arr[j] = t;
32         }
33     }//外循环尾
34 
35     //执行完循环后,就找到了基准数的排序位置,将基准数tmp与i位置进行交换
36     arr[left] = arr[i];
37     arr[i] = tmp;
38     //*********************************************
39     //下面的程序为递归,可能存在多层递归调用
40     //*********************************************
41     //此时的数组分为了两部分,基准数左边都是小于基准数的,右边都是大于基准数的,
42     //现在进行递归,对基准数左边的数进行排序,此时递归可能会有多层
43     QkSort(arr, left, i - 1);
44     //进行到这步时,基准数左边已经全部有序,而右边还未进行排序,
45     //现在进行递归,对基准数右边的数据进行排序,此时递归可能有多层
46     QkSort(arr, i + 1, right);
47 }
48 
49 int main()
50 {
51     int arr[] = { 0, 4, 3, 5, 65, 2, 64, 68, 34, 94, 53, 74, 13 };
52     int len = sizeof(arr)/sizeof(int);
53     printf("待排序数值:  ");
54     for (int i = 0; i <=len-1; i++)
55     {
56         printf("%d ",arr[i]);
57     }
58     printf("\n");
59     printf("排序后的数值:");
60     QkSort(arr,0,len-1);//调用快速排序函数
61     for (int i = 0; i <=len-1; i++)
62     {
63         printf("%d ", arr[i]);
64     }
65         printf("\n");
66 }

最终实现结果:

 

标签:arr,int,代码,left,排序,快速,基准,指针
From: https://www.cnblogs.com/kunshanpipixia/p/18195310

相关文章

  • 从C#通过代码启动Python脚本没有接收到参数
    本来写的是这样:ProcessStartInfopsi=newProcessStartInfo{FileName="cmd.exe",WorkingDirectory=FrmNewProject.GetFolderPath()+"\\SolverForEXE",RedirectStanda......
  • 二维数组排序
    为了更灵活地控制排序字段和排序顺序,可以修改DataSorter类,使其能够通过参数指定排序字段和排序顺序。以下是实现方法:DataSorter类<?phpclassDataSorter{/***按指定字段和顺序排序二维数组**@paramarray$data要排序的二维数组*@param......
  • 代码随想录算法训练营第第八天 | 344.反转字符串 、541. 反转字符串II、卡码网:54.替
    344.反转字符串建议:本题是字符串基础题目,就是考察reverse函数的实现,同时也明确一下平时刷题什么时候用库函数,什么时候不用库函数题目链接/文章讲解/视频讲解:https://programmercarl.com/0344.反转字符串.html/***@param{character[]}s*@return{void}Donotret......
  • python代码上传文件到fastdfs
    Install直接pip安装,需要Python3.10+pipinstallfastdfs-clientInitialclient可以用其他教程的client.conf配置文件的方式,也可以直接传入ip列表进行初始化fromfastdfs_clientimportFastdfsClientclient=FastdfsClient(trackers=('ip1','ip2',...))Uploadbyfil......
  • 【Azure Developer】如何通过Azure Portal快速获取到对应操作的API并转换为Python代码
    问题描述对于Azure资源进行配置操作,门户上可以正常操作。但是想通过Python代码实现,这样可以批量处理。那么在没有SDK的情况下,是否有快速办法呢? 问题解答当然可以,AzurePortal上操作的所有资源都是通过RESTAPI来实现的,所以只要找到正确的API,就可以通过浏览器中抓取到的请求B......
  • 如何把 log4net.config 文件删除, 改成代码实现
    如何把log4net.config文件改成代码?这样在编写winform或者其他客户端的时候就省去了一个配置文件分享下我常用的log4net.config配置文件<?xmlversion="1.0"encoding="utf-8"?><configuration><!--<configSections><sectionname="log4net"typ......
  • 排序、过滤、分页
    排序、过滤、分页1.排序1.1使用条件#必须是查询所有接口--》restful规范中:地址栏中带过滤条件 http://127.0.0.1:8008/app01/api/v1/books/?ordering=price#必须是继承GenericAPIView的视图类---》继承APIView是不能这么配置的1.2使用排序#1.引入相关排序相关......
  • 02快速上手drf、CBV源码分析、APIVIEW源码分析
    快速上手drf、CBV源码分析、APiview源码分析一、快速上手drf【1】安装drfpipinstalldjangorestframework注意:安装时不指定版本,默认下载最新版本每个版本有对应的解释器版本和django限制要求,下载时官网查看一下如果django版本是3以下,drf最新跟django3以下版本不兼容版......
  • EAV模型(实体-属性-值)的设计和低代码的处理方案(2)--数据的查询处理
    我在随笔《EAV模型(实体-属性-值)的设计和低代码的处理方案(1)》中介绍了一些基本的EAV模型设计知识和基于Winform场景下低代码(或者说无代码)的一些实现思路,在本篇随笔中,我们来分析一下这种针对通用业务,且只需定义就能构建业务模块存储和界面的解决方案,其中的数据查询处理的操作。1、......
  • RouteServiceProvider代码讲解
    这段代码是Laravel框架中RouteServiceProvider类的一部分,用于配置应用程序的路由和速率限制器。下面是对这段代码的详细解释:方法bootpublicfunctionboot():void{//RateLimiter配置RateLimiter::for('api',function(Request$request){return......