八大排序算法总结

八大排序算法复杂度及C++实现 八大排序算法C++代码实现冒泡排序(从小到大)排序原理:优化方法:应用场景:选择排序(从小到大)插入排序(从小到大)希尔排序桶排序堆排序快排序归并排序 冒泡排序(从小到大) 排序原理: 相邻两个值比较大小,按照排序规则摆放,重复之前操作,下面代码: void BubbleSort(vector<int>& nums) { for(int i=nums.size()-1;j>0;j--) { for(int j=0;j<i;j++) { if(nums[j]& 阅读详情

1.冒泡排序(Bubble Sort)

2.选择排序(Selection sort)

3.插入排序(Insertion sort)

4.基数排序(Radix sort)

5.希尔排序(Shell's Sort)

6.快速排序(Quicksort)

7.堆排序(Heapsort)

8.归并排序(Merge Sort)

前三种的时间复杂度为O(n^2),后五种的时间复杂度为O(nlogn)

1.冒泡排序(Bubble Sort)

两两比较交换

public void sort(int[]arr) {
    for (int j = 0; j < arr.length-1; j++) {//控制轮数
        for (int i = 0; i < arr.length-j-1; i++)//游标移动比较
        {
            if (arr[i] > arr[i + 1]) {
                int temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }
        }
    }
}

2.选择排序(Selection sort)

找到最小值和待排序数组第一个交换。

冒泡排序动图演示

 public static void sort(int[] arr) {
    for (int j=0;j< arr.length;j++){
	      int minindex=j;
	      int min=arr[j];
	      for (int i=j+1;i< arr.length;i++){
	          if (min>arr[i]){
	         min=arr[i];
	        minindex=i;
	          }
	      }
	      //待排序数组
	      arr[minindex]=arr[j];
	      arr[j]=min;
}
}

3.插入排序(Insertion sort)

认为数组中第一个位置是已经排好序的数组,然后用一个游标 i 指向第二个位置,定义游标 j=i-1,令j 和 j+1进行比较并不断前移依次和已排好序的数组中的数据进行比较,将其有序插入到已排好序数组中。

在这里插入图片描述

public static void sort(int[]arr) {
for (int i=1;i< arr.length;i++){
    for (int j=i-1;j>=0;j--){
        if (arr[j]>arr[j+1]){
            int temp=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=temp;
        }else {
            break;
        }
    }
        }
}

4.基数排序(Radix sort)

基数排序又称“桶子法”、“桶排序”。总共设置十个桶,第一次先按个位放入,接着取出,然后按照十位放入再取出,仿佛仿佛这样操作,直到位数最长的数字的位数比较完毕排序完成。

在这里插入图片描述

public class RadixSort {
	public static void main(String[] args) {
		int[] arr = new int[] {12,98,10,123,1,15,26,30,87,96,130,97,45,68,89};
		sort(arr);
		System.out.println(Arrays.toString(arr));
	}
	
	public static void sort(int[] arr) {
		//定义桶
		int[][] bucket = new int[10][arr.length];
		//定义桶记录器
		int[] elementCounts = new int[10];
		
		// 找到数组当中的最大值
		int max = arr[0];
		for(int i = 0;i<arr.length;i++) {
			if(arr[i] > max) {
				max = arr[i];
			}
		}
		
		//找到最大值的位数
		int maxLength = (max + "").length();
		
		int n = 1;
		for(int h = 0;h<maxLength;h++) {
			//向桶内放数据
			for(int i = 0;i<arr.length;i++){
				//计算个位的值
				int element = arr[i] / n % 10;//放入到桶内
				int count = elementCounts[element];
				bucket[element][count] = arr[i];
				elementCounts[element] = elementCounts[element] + 1;
			}
			int index= 0;
			//将桶内的数据取出
			for(int k = 0;k<elementCounts.length;k++){
				if(elementCounts[k] !=0){
					for(int l = 0;l<elementCounts[k];l++){
						arr[index] = bucket[k][l];
						index++;
					}
				}
				//清空桶记录器
				elementCounts[k] = 0;
			}
			n = n * 10;
		}
	}
	
}

5.希尔排序(Shell's Sort)

将小的数据放到前边,大的数据放到后边。通过步长对数据进行分组,将步长设为数组长度的1/2,每次都能将每组在组内进行排序,小数值在前,大数值在后,然后通过改变步长,不断将步长变为上一次步长的1/2,如此反复直至完成排序。

public static void ShellSort(int[]arr){
    for(int gap = arr.length/2; gap>0; gap/=2) {
        for(int i = gap;i<arr.length;i++) {
            for(int j = i-gap;j>=0;j-=gap) {
                if(arr[j] > arr[j+gap]) {
                    int temp = arr[j];
                    arr[j] = arr[j+gap];
                    arr[j+gap] = temp;
                }
            }
        }
    }
}

【数据结构和算法】 八大排序算法详解 ???? 作者:Linux猿 ???? 简介:优快云博客专家????,C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊! ???? 关注专栏:C/C++面试通关集锦(优质好文持续更新中……)???? 目录 一、冒泡排序 1. 算法思想 2. 实例演示 3. 代码实现 4. 算法复杂度 二、选择排序 1. 算法思想 2. 实例演示 3. 代码实现 4. 算法复杂度 三、快速排序 1. 算法思想 2. 实例演示 3. 代码实现 4. 算法复杂度 四、归并排序 阅读详情

相关推荐

黄海安-八大排序算法总结

排序算法总结。。。排序算法总结。。。。排序算法总结。。

十大经典排序算法总结整理

参考文章: 十大经典排序算法最强总结:https://www.cnblogs.com/guoyaohua/p/8600214.html 排序算法总结:https://www.runoob.com/w3cnote/sort-algorithm-summary.html 术语说明 内排序:所有排序操作都在内存中完成; 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数...

ytusdc的博客 6948

最经典的8大排序算法总结

最经典的8大排序算法总结,插入排、冒泡排序、快速排序、简单选择排序、归并排序、二叉树排序、基数排序等。

【八大排序算法总结】超详解

排序算法的分析,源码剖析,性能测试,排序算法的时间、空间、稳定性总结

m0_52882232的博客 1305

八大排序算法总结(含Java实现源代码)

总结了常用的八大排序算法:(交换式:1、冒泡,2、快排; 选择式:3、选择, 4、堆排; 插入式:5、插入, 6、希尔; 其他:7、归并, 8、基数排序)。 并包含了Java实现的源代码。

八大排序算法总结八大排序算法总结

八大排序算法总八大排序算法总八大排序算法总八大排序算法总结

【算法】八种常见排序算法-总结

插入排序通过构建有序序列,对未排序的元素逐个进行插入的方式排序。它从第二个元素开始,将其与已排序序列进行比较并插入到正确的位置,直到所有元素都被插入为止。插入排序是一种稳定的排序算法,适用于小规模数据或部分有序的数据。冒泡排序通过相邻元素的比较和交换,将最大的元素逐渐冒泡到最后的位置。它从列表的第一个元素开始,依次比较相邻的元素并交换位置,直到整个列表排序完成。冒泡排序是一种简单但效率较低的排序算法,适用于小规模数据或基本有序的数据。

分享Java硬核干货 1万+

【C++】lambda表达式

本篇文章我们要学习的是lambda表达式,它是C++11新增的一种特别方便的语法,相较于之前的函数指针以及仿函数都方便了不少,下面就让我们一起来学习吧。

malloc不出对象的博客 2630

八大排序思想总结(看完你也能悟系列)

冒泡排序。

2401_86155366的博客 403

图形学基础知识:着色(三)Rendering Pipeline与Shader

管线(Pipeline) 什么是管线? 管线我们可以理解为流水线,流水线大家都懂,就是工厂里面生产东西的一整套流程。例如饮料厂要生产饮料,需要洗瓶子,倒饮料,加盖,包装等等,这一整套过程就是流水线。那么我们要把一个三维场景渲染成一幅二维的图像,同样需要一个先干嘛再干嘛然后干嘛最后干嘛的过程,这个过程或流水线,我们就称之为管线。 实时渲染管线(Real-time Rendering Pipeline) 通过前面几篇的学习,我们知道了要把一个三维场景渲染成一幅二维的图像大致分为以下几个步骤: M.

王王王渣渣的博客 2532

MTK Linux DRM分析(十一)- MTK KMS Panel显示屏驱动

面板扩展(Panel Extension)是指 MediaTek 在标准 DRM 面板驱动框架之上添加的定制化功能模块。

iTom1900 1684

八大经典排序算法

详细讲解了经典的排序算法的思路和实现过程

weixin_43164548的博客 1万+

Ubuntu开发环境配置——持续更新

本文简要介绍了Ubuntu下的开发环境配置流程和问题分析与解决,更多内容持续更新中。

m0_53365889的博客 2224

八大排序算法

排序是计算机科学中最基础、应用最广泛的算法之一。它将一组无序的数据元素(或记录)按照某种特定的顺序(如升序或降序)重新排列,是数据检索、统计分析、高效算法设计等众多领域的基石。本章总结了学习过程中八大排序算法,包括比较排序和非比较排序。

努力学习C++的熊大(保护森林版) 2335

UDF学习(二)基础数据类型与常见宏

thread_loop_c (t,d) 必须与begin_c_loop (c,t)同时使用,但begin_c_loop (c,t)不一定与thread_loop_c (t,d)同时使用。同理thread_loop_f(t,d)必须与begin_f_loop (c,t)同时使用,但begin_f_loop (c,t)不一定与thread_loop_f(t,d)同时使用。begin_c_loop (c,t) 在计算域内对网格单元进行循环。c_face_loop (c,t)遍历网格单元上的所有网格面。

weixin_44386973的博客 855

人工智能智能体研究综述:从理论架构到前沿应用

AI Agent,即人工智能智能体,是指能够在特定环境中自主感知、推理、决策并执行行动以实现特定目标的智能系统[1]。自主性反应性主动性(Pro-activeness)和社会性fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;AI Agent核心特征自主性 Autonomy反应性 Reactivity主动性 Pro-activeness。

nmdbbzcl的博客 902

八大排序算法详解(通俗易懂)

排序算法很重要,本篇重点讲解它,如果本篇博客对你有所帮助,请给博主一个三连哦!

weixin_61661271的博客 2万+

机器人中的数值优化(十二)——带约束优化问题简介、LP线性规划

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例

慕羽★的博客 3851

八大排序算法(面试被问到)

(通常不提)。此外,还可以直接调用进行排序。

qq_66767167的博客 2707

2024年软考信息安全工程师备考历年真题汇总

信息安全工程师分属“信息系统”专业,位处中级资格,2016年下半年,第一次开考信息安全工程师(中级)考试。目前每年考试一次。已开考六次,2016年11月12日,2017年5月20日,2018年5月26日,2019年5月25日,2020年11月7日,2021年11月6日为第六次考试。 第五次和第六次考试,采用第二版教材。 2024年软考信息安全工程师备考历年真题汇总

月梦工作室 5101

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

八大排序算法(一)

排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;

heyuchang666的专栏 7452

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

常见八大排序算法

八大常见排序算法: 一、直接插入排序 二、希尔排序 三、选择排序 四、堆排序 五、冒泡排序 六、快速排序 1.递归实现 2.非递归实现 七、归并排序 1.递归实现 2.非递归实现 八、计数排序 目前上述几种排序算法,只有直接插入排序、冒泡排序、归并排序和计数排序是稳定的。

crazy_xieyi的博客 860

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java 八大排序算法

数据结构 + 算法 是我们编程的灵魂,其中一个都不能缺少,数据结构我们要掌握的也就那几种,算法也一样,其中排序算法是我们最常见的,也是面试、考核中最为广泛的,在 Java 的世界中我们需要掌握八大排序算法,这是我们进阶,进入大公司一定不能躲避的,所以这八种排序算法是我们必须要掌握的。 Java 排序算法 — 直接插入排序 Java 排序算法 — 希尔排序 Java 排序算法 — 简单选择排序 J...

chenssy 的技术博客 6118
下一篇: 样本空间与事件集合,事件间的关系——概率论与数理统计(宋浩)
batcat560
博客等级 码龄5年 581粉丝 79原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值