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

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

注意: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

相关文章

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Jackson库进行JSON 序列化时遇到了无限递归(Infinite Recursion)的问题及解决方案

《Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursion)的问题及解决方案》使用Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursi... 目录解决方案‌1. 使用 @jsonIgnore 忽略一个方向的引用2. 使用 @JsonManagedR

C++快速排序超详细讲解

《C++快速排序超详细讲解》快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下... 目录一、快速排序原理二、快速排序标准代码三、代码解析四、使用while循环的快速排序1.代码代码1.由快

Win32下C++实现快速获取硬盘分区信息

《Win32下C++实现快速获取硬盘分区信息》这篇文章主要为大家详细介绍了Win32下C++如何实现快速获取硬盘分区信息,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实现代码CDiskDriveUtils.h#pragma once #include <wtypesbase

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

Python如何快速下载依赖

《Python如何快速下载依赖》本文介绍了四种在Python中快速下载依赖的方法,包括使用国内镜像源、开启pip并发下载功能、使用pipreqs批量下载项目依赖以及使用conda管理依赖,通过这些方法... 目录python快速下载依赖1. 使用国内镜像源临时使用镜像源永久配置镜像源2. 使用 pip 的并

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

Rust中的BoxT之堆上的数据与递归类型详解

《Rust中的BoxT之堆上的数据与递归类型详解》本文介绍了Rust中的BoxT类型,包括其在堆与栈之间的内存分配,性能优势,以及如何利用BoxT来实现递归类型和处理大小未知类型,通过BoxT,Rus... 目录1. Box<T> 的基础知识1.1 堆与栈的分工1.2 性能优势2.1 递归类型的问题2.2