冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序的递归版。(直接可用,懒人必备)。

本文主要是介绍冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序的递归版。(直接可用,懒人必备)。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

注意:1.在使用前需要先将Swap函数放在最前面。基本上都用了了Swap函数。

           2.完成的是升序版本,如想逆序,自行更改。

目录

Swap函数:

冒泡排序:

选择排序

插入排序

希尔排序

堆排序

快速排序


Swap函数:

void Swap(int* a, int* b)
{int temp = *a;*a = *b;*b = temp;
}

冒泡排序:

void BubbleSort(int arr[], int n)
{for (int i = 0; i < n-1; i++){for (int j = 0; j < n-i-1; j++){if (arr[j] > arr[j + 1]){Swap(&arr[j], &arr[j + 1]);}}}
}

选择排序

void SlectSrot(int* a, int n)
{int left = 0;int right = n - 1;while (left<right){int mini = left;int maxi = left;for (int i = left+1; i <= right; i++){if (a[i]<a[mini]){mini = i;}if (a[maxi] < a[i]){maxi = i;}}Swap(&a[mini], &a[left]);if (maxi == left)//因为如果maxi==left,left已经和mini交换了之前的left的位置此时在mini处。{maxi = mini;}Swap(&a[maxi], &a[right]);left++;right--;}
}

插入排序

void InsertSort(int* a, int n)
{for (int i = 0; i < n-1; i++){int end = i;int temp = a[end + 1];while (end >= 0){if (a[end] > temp){Swap(&a[end], &a[end+1]);end--;}else{break;}}a[end + 1] = temp;}
}

希尔排序

void ShellSort(int* a, int n)
{int garp = n/2;while (garp>0){for (int i = 0; i < n - garp; i++){if (garp < 1){break;}int end = i;int temp = a[end + garp];while (end >= 0){if (a[end] > temp){Swap(&a[end], &a[end + garp]);end -= garp;}else{break;}}a[end + garp] = temp;}garp /= 2;}
}

堆排序

void HeapSort(int arr[], int n)
{for (int i = (n - 1 - 1) / 2; i >= 0; i--){AdjustDown(arr, i, n);}int end = n - 1;while (end > 0){Swap(&arr[0], &arr[end]);AdjustDown(arr, 0, end);end--;}
}//向下调整
void AdjustDown(int arr[], int father,int n)
{int child=father*2+1;while(child<n){if (child + 1 < n && arr[child] < arr[child + 1]){child++;}if (arr[child]>arr[father]){Swap(&arr[child], &arr[father]);father = child;child = father * 2+1;}else{break;}}
}

快速排序

void QuickSort(int* a, int left,int right)
{ if (left >= right){return;}int begin=left;int end = right;//对快速排序的优化//1.随机取值//2.三数取中//随机取值//int randi = rand() % (right - left);//randi += left;//Swap(&a[left], &a[randi]);//三数取中//int mid = FindMid(a, left, right);//Swap(&a[left], &a[mid]);int keyi=left;while (left < right){while (left<right && a[right]>=a[keyi]){right--;}while (left < right && a[left]<=a[keyi]){left++;}Swap(&a[left], &a[right]);}Swap(&a[left], &a[keyi]);QuickSort(a, begin, left - 1);QuickSort(a, left + 1, end);
}

这篇关于冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序的递归版。(直接可用,懒人必备)。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/835848

相关文章

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

MybatisX快速生成增删改查的方法示例

《MybatisX快速生成增删改查的方法示例》MybatisX是基于IDEA的MyBatis/MyBatis-Plus开发插件,本文主要介绍了MybatisX快速生成增删改查的方法示例,文中通过示例代... 目录1 安装2 基本功能2.1 XML跳转2.2 代码生成2.2.1 生成.xml中的sql语句头2

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

Java List排序实例代码详解

《JavaList排序实例代码详解》:本文主要介绍JavaList排序的相关资料,Java排序方法包括自然排序、自定义排序、Lambda简化及多条件排序,实现灵活且代码简洁,文中通过代码介绍的... 目录一、自然排序二、自定义排序规则三、使用 Lambda 表达式简化 Comparator四、多条件排序五、

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

mysql递归查询语法WITH RECURSIVE的使用

《mysql递归查询语法WITHRECURSIVE的使用》本文主要介绍了mysql递归查询语法WITHRECURSIVE的使用,WITHRECURSIVE用于执行递归查询,特别适合处理层级结构或递归... 目录基本语法结构:关键部分解析:递归查询的工作流程:示例:员工与经理的层级关系解释:示例:树形结构的数