首页 > 编程语言 >C++ 实现 快速排序

C++ 实现 快速排序

时间:2023-09-14 10:34:25浏览次数:31  
标签:10 arr right int C++ start 排序 快速 left

#include<iostream>
using namespace std;

void quickSort(int(&)[10], int, int);
int partition(int(&)[10], int, int);

void printArr(const int(&)[10]);
void swap(int(&)[10], int, int);

int main()
{
int arr[10] = { 23, 45, 18, 6, 11, 19, 22, 18, 12, 9 };

printArr(arr);

int size = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, size - 1);

printArr(arr);

cin.get();
}

// 快速排序
void quickSort(int(&a)[10], int start, int end)
{
// 基准情况
if (start >= end)
return;

// 分区,返回分区点下标
int mid = partition(a, start, end);

// 递归调用,分别对两部分继续排序
quickSort(a, start, mid - 1);
quickSort(a, mid + 1, end);
}

// 按照pivot分区的函数
int partition(int(&a)[10], int start, int end)
{
// 选取一个分区的“支点”
int pivot = a[start];

int left = start, right = end;

while (left < right)
{
// 分别从左右两边遍历数组
while (a[left] <= pivot && left < right)
++left;
while (a[right] >= pivot && left < right)
--right;

// 左右互换
swap(a, left, right);
}
if (a[left] < pivot) {
swap(a, start, left);
return left;
}
else if (a[left] > pivot)
{
swap(a, start, left - 1);
return left - 1;
}
}

// 数组中两元素互换的函数
void swap(int(&a)[10], int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}

// 打印输出一个数组
void printArr(const int(&a)[10])
{
for (int num : a)
cout << num << "\t";
cout << endl;
}

标签:10,arr,right,int,C++,start,排序,快速,left
From: https://www.cnblogs.com/huangzuhong/p/17701821.html

相关文章

  • 用c++ 实现 二分查找 前提是先把数组排列好
    #include<iostream>usingnamespacestd;//可以递归调用的二分查找intsearch(constint(&a)[10],intstart,intend,inttarget){ //基准情况:目标值超出范围,或者start>end,说明没有找到 if(target<a[start]||target>a[end]||start>end) return-1; //取二分......
  • 在Next.js博客中快速引入Waline评论系统
    之前我在研究Next.js博客时,发现它们很多缺少一个作为博客的基本的东西:评论,就算有,也是Gistus这类依赖于GitHub的评论系统,而在国内还是尽量选择一个无需登录的评论系统,于是我选择了Waline作为评论系统,在引入过程中遇到了一些坑,不过最后还是引入完成了。模板选择我选择了Netlify的......
  • 快速上手Git
    Git是一个分布式版本控制系统,可以帮助开发团队协同开发、追踪代码变更以及管理代码的历史记录。以下是关于Git的一些常用操作和命令。一、新建代码库使用Git之前,首先需要创建一个代码库(Repository),用来存储代码的版本记录。#在当前目录新建一个Git代码库:$gitinit#在指定目录......
  • 根据名称出现的次数,对数据源降序排序!
    1职场实例小伙伴们大家好,今天我们来解决一个Excel微信答疑群内的群友提问:如何根据名称出现的次数,由次数高到低排序?这个问题的解决充分体现了大家对Excel基础知识的运用情况。同时这个问题也是Excel的入门技巧,大家对它的掌握情况也能从侧面反映出是否对Excel有一个基本的认识。如下......
  • 拓扑排序
    在图论中,拓扑排序是有向无环图(DAG)所有顶点的线性序列若存在一条从顶点A到顶点B的路径,那么在序列中顶点A出现在顶点B的前面此图全部顶点被输出:说明说明图中无「环」存在,是AOV网没有输出全部顶点:说明图中有「环」存在,不是AOV网必需概念:入度--顶点x作为例如A-B......
  • c++ 32位异常还原
    本文中的例子下载地址https://wwmf.lanzout.com/ij4zq18au9yd密码:2vts确定try的位置首先确定try的位置上面明显是一个SEH结构,在c++异常中,state固定在var_4的位置上,这里state初始化位-1,我们将var_4改名为state上图为ida的反编译图,当state赋值为0时,为try的开始,state赋值为......
  • Spring MVC 教程,快速入门,深入分析
    SpringMVC教程,快速入门,深入分析资源下载:Spring_MVC_教程_快速入门_深入分析V1.1.pdfSpringMVC核心配置文件示例.rar 作者:赵磊博客:http://elf8848.iteye.com 目录一、前言二、springmvc核心类与接口三、springmvc 核心流程图四、springmvc DispatcherServlet......
  • 快速导航固定栏开发-2
    功能是能够点击导航栏的字母快速对应到相应的标题栏,手指拖动时候也可以去绑定切换对应的导航栏字母步骤:1、给导航栏shortcut绑定@touchstart.stop.prevent="onShortcutTouchStart“还有touchmove和touchend,这里加上stop和prevent是为了阻止浏览器自带的默认行为。然后在use-shor......
  • c/c++ 混合编译makefile
    CC=gccC++=g++LINK=g++INCLUDES=-L.-IsconvLIBS=-lz-lmCCFLAGS=$(COMPILER_FLAGS)--std=c99-c-g-MMD-MP$(DEFINES)C++FLAGS=$(COMPILER_FLAGS)-std=c++11-c-g-O2-W-WallTARGET=222CFILES=sconv/sconv.cC++FILES=2.cppOBJ......
  • 深入了解快速排序算法
    快速排序(QuickSort)是一种高效的、分治法的排序算法,它在实际应用中被广泛采用,因为其性能优越。本文将详细介绍快速排序的工作原理,提供示例和Python、Go、Java以及C语言的实现代码。快速排序的基本思想快速排序的核心思想是通过选择一个基准元素,将数组划分为两个子数组:小于基准的子......