常见的几大排序算法——Java语言描述

华为IC岗笔试刷题含答案(2) 又做了几套题,记录了部分及答案,如有错误,欢迎评论指正。 阅读详情

排序是重要的算法,熟练地掌握各种排序算法是程序员必备的素质。博主学习排序的时候经常去翻阅他人博客,收获很大,总结出了各种排序,现在分享出来。所有算法都是经过博主检验的,应该没啥大问题。

冒泡排序:

public  static void bubbleSort(int a[]){
		int temp, flag;
		for(int i=0;i<a.length;i++){
			flag=0;
			for(int j=0;j<a.length-1;j++){
				if(a[j]>a[j+1]){
					temp=a[j];
					a[j]=a[j+1];
					a[j+1]=temp;
					flag++;
				}
			}
			if(flag==0)
				break;
			
		}
	}


选择排序:

public static void selectSort(int[] a){
		int index,temp;;
		for(int i=a.length-1;i>=0;i--){
			index=0;
			
			for(int j=1;j<=i;j++){
				if(a[j]>a[index]){
					
					index=j;
				}
			}
			temp=a[i];
			a[i]=a[index];
			a[index]=temp;
		}
	}


插入排序:

public static void insertSort(int[] a){
		int temp=0,j=0;
		for(int i=1;i<a.length;i++){
			temp=a[i];
			for(j=i-1;j>=0&&temp<=a[j];j--)
				a[j+1]=a[j];
			a[j+1]=temp;
		}
	}


希尔排序:

public static void shellSort(int[] a){
		int d=a.length;
		int temp=0;
		while(d!=0){
			d=d/2;
			for(int x=0;x<d;x++){
				for(int i=x+d;i<a.length;i+=d){
					temp=a[i];
					int j=0;
					for(j=i-d;j>=0&&temp<=a[j];j-=d)
						a[j+d]=a[j];
					a[j+d]=temp;
				}
			}
			
		}
	}


快速排序:

public static void quick_sort(int a[], int l, int r)  
	{  
	    if (l < r)  
	    {  
	          
	        int i = l, j = r, x = a[l];  
	        while (i < j)  
	        {  
	            while(i < j && a[j] >= x) // 从右向左找第一个小于x的数  
	                j--;    
	            if(i < j)   
	                a[i++] = a[j];  
	              
	            while(i < j && a[i] < x) // 从左向右找第一个大于等于x的数  
	                i++;    
	            if(i < j)   
	                a[j--] = a[i];  
	        }  
	        a[i] = x;  
	        quick_sort(a, l, i - 1); // 递归调用   
	        quick_sort(a, i + 1, r);  
	    }  
	}  


归并排序:

    public static void mergeArray(int[] a,int first,int mid,int last,int[] c){
    	int i=first;
    	int m=mid;
    	int j=mid+1;
    	int n=last;
    	int k=0;
    	while(i<=m&&j<=n){
    		if(a[i]<=a[j])
    			c[k++]=a[i++];
    		else
    			c[k++]=a[j++];
    	}
    	while(i<=m)
    		c[k++]=a[i++];
    	while(j<=n)
    		c[k++]=a[j++];
    	for(i=0;i<k;i++){
    		a[first+i]=c[i];
    	}
    }
    public static void mergeSortFunction(int[] a,int first,int last,int[] temp){
    	int mid=first+(last-first)/2;
    	if(first<last){

    		mergeSortFunction(a,first,mid,temp);

    		mergeSortFunction(a,mid+1,last,temp);

    		mergeArray(a,first,mid,last,temp);

    	}
    }


堆排序:

public static void heapify(int[] a,int i,int j){
		int k=2*i;//k 是i的左孩子
		int x=a[i];//用x来保存a[i] 便于空出根位置 让大儿子上升
		while(k<=j){//循环判断 条件 也就是i不是叶子
			if(k<j)//因为要有左右孩子 所以k<j
				if(a[k]<a[k+1]) k=k+1;//if判断左右孩子谁更大 如果右边大 让k指向右边 因此k一直指向最大的那个孩子 也就是大儿子
			
			
			if(x>=a[k])	//如果根元素已经大于等于大儿子了 这时候堆调整结束  循环终止
				break;
			else{
				a[i]=a[k];//否则的话  让大儿子占据根元素 位置上升
				i=k;// 这时候 原来的根元素指向之前大儿子的位置
				k=2*i;//再次让k成为i的左孩子  进行下一次 堆调整
			}
		}
		a[i]=x;//最后将最原始的根元素放入底部
	}
	
	public static void heapSort(int[] a,int n){
		for(int i=n/2;i>=1;i--)//考虑到左右孩子的值,i不能超过一半  也不能为0  循环调整堆  即初始化堆
			heapify(a,i,n);
		for(int i=n;i>1;i--){//循环将根元素和最后一片叶子交换
			int temp=a[1];
			a[1]=a[i];
			a[i]=temp;
			heapify(a,1,i-1);//重新初始化堆  从1到i-1
		}
	}


Android实现自动输入文本效果 (附完整源码) Android实现自动输入文本效果 (附完整源码) 阅读详情

相关推荐

国内合规开通ChatGPT Plus实操指南:银行卡绑卡与支付全解析

ChatGPT Plus 是 OpenAI 官方推出的高级订阅服务,基于 GPT-4o 多模态大模型提供语音交互、图像理解与长上下文处理能力。其核心使用前提在于完成合规的国际支付绑定,而非网络接入方式。技术原理上,OpenAI 采用 Stripe 支付网关进行风控校验,重点匹配银行跨境权限、卡片类型(仅支持 Visa/Mastercard/Amex 信用卡)、BIN 号段及地理位置一致性。该机制决定了95%的绑卡失败源于银行端配置缺失或卡片不兼容,而非网络问题。实际应用中,PayPal 作为中间支付层可显著

chuannaoxuan4674的博客 2012

基础夯实:基础数据结构与算法(二)

基础夯实:基础数据结构与算法(二)常见的10种算法1、递归算法例题1:计算n!例题2:斐波那契数列例题3:递归将整形数字转换为字符串例题4:汉诺塔例题5:猴子吃桃例题6:N皇后问题2、排序算法冒泡排序:快速排序:3、二分查找算法4、搜索算法5、哈希算法6、贪心算法7、分治算法求x的n次幂归并排序8、回溯算法9、动态规划(DP)算法10、字符串匹配算法参考文献 上一章我们说了常见的10种数据结构,接下来我们说常见的10种算法。 上一章地址:基础夯实:基础数据结构与算法(一),不怎么清楚的可以去瞅瞅。 常见的1

熊泽-学习中的苦与乐 4364

我看MFC的过去、现在和未来

首先说句题外话,虽然我现在的“主业”是Qt,但自己扪心自问,对MFC的熟悉程度要超过Qt。正是由于有了对MFC的熟悉,才能在使用Qt时,比较清醒的认清两者的优劣之处,在此暂且不提。 这个话题也可以说是由来已久,众说纷纭,今时我也谈谈自己的感悟。 一、对MFC的总体看法 首先看看云风在其《游戏之旅-我的编程感悟》一书中对MFC的看法: “我所见到的程序员中,很多把C+

qter_wd007的专栏 6117

常见的10种算法

Hash,一般翻译做散列、杂凑,或音译为哈希,是一个典型的利用空间换取时间的算法,把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。如有一个学生信息表:学生的学号为:年纪+学院号+班级号+顺序排序号【如:19(年纪)+002(2号学院)+01(一班)+17(17号)---à190020117】类似于一个这样的信息,

zxf347085420的博客 2万+

华为路由器静态路由配置实战:从零搭建企业级网络环境(含常见错误排查)

本文以真实企业组网案例为基础,详细解析华为路由器静态路由的实战配置流程。内容涵盖从网络拓扑规划、IP地址分配到具体的`ip route-static`命令配置,并重点讲解了缺省路由、浮动路由等进阶应用。文章还提供了系统化的排错指南,帮助网络工程师规避回程路由缺失、子网掩码错误等常见问题,是掌握企业级网络搭建与维护的实用指南。

weixin_29313817的博客 90

RunHarmony报错解析:如何解决data.use与cell.embeddings维度不匹配问题

本文深入解析了单细胞数据分析中RunHarmony函数报错'non-conformable arguments'的根源,即data.use与cell.embeddings矩阵维度不匹配。核心原因是assay(如RNA与integrated)错配导致细胞ID或数量不一致。文章提供了三种解决方案:最推荐显式指定assay.use参数,也可设置project.dim=FALSE或统一数据环境,并给出了最佳实践指南以避免此类错误。

weixin_29093017的博客 577

涨姿势:10 大主宰世界的牛逼算法!

公众号关注“GitHubDaily”设为 “星标”,每天带你逛 GitHub!作者:claudio | 煎蛋Reddit 有篇帖子介绍了算法对我们现在生活的重要性,以及哪些算法对现代文...

GitHubDaily 728

Android 12,通过JNI写framebuff实现白板书写加速

Android 书写加速

448313096@qq.com 1204

五大常用算法

学习算法前,先了解一下五大常用算法,方便后续归类总结及练习,到达触类旁通的效果。 一。分治算法:快速排序、归并排序、大整数乘法、二分查找、递归(汉诺塔) 基本概念:把一个复杂的问题分成若干个相同或相似的子问题,再把子问题分成更小的子问题… , 知道最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。 看上去有点类似Fork/Join框架,或map-reduce。 排序算法中的快速排序、归并排序都是使用的分治算法。 分治算法的适用场景: 1)当问题规模缩小到一定的程度就可以很容易解决 2)

qq_43517257的博客 4317

AE 与 ISP 参数联动机制解析:自动曝光系统与图像信号处理模块协同设计实践

AE(自动曝光)并不是一个独立的图像控制模块,而是与 ISP(Image Signal Processor)深度耦合运作的系统协同体。其输出的曝光参数直接决定了图像处理链路中 Gamma 曲线选择、黑电平补偿、去噪级别、边缘增强等一系列关键参数的取值。本文基于主流平台(如高通、MTK、海思)的工程实战经验,详细剖析 AE 与 ISP 在曝光驱动、调节优先级、图像还原逻辑等环节的联动机制,并结合拍照与视频等不同场景,给出可落地的联调方法。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1528

【YOLOv11改进 - 特征融合】SDI:多层次特征融合模块,替换contact操作

【YOLOv11改进 - 特征融合】SDI:多层次特征融合模块,替换contact操作

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1771

十大基本算法介绍

转载地址:https://www.cnblogs.com/onepixel/articles/7674659.html 一、算法概述: 1.算法分类: 十种常见算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能超过Q(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下限, 以...

_陌默 10万+

华为OD机试真题 新系统 - 计算数列位置N的值 (Java/Py/C/C++/Js/Go)

本文整理华为 OD 机试新系统机考真题库,涵盖高频考点精析与完整题目内容,提供 C 语言、Java、C++、Python、Go、JavaScript 多语言源码实现,搭配详细解题思路讲解,并支持在线 OJ 刷题练习,助力高效备考华为 OD 机试新系统。

算法大师! 2012

在Java语言中 ,集合中的排序算法浅析

通过该方法注释,查看到有三项值得关注的信息,大概意思是该方法实现了稳定且默认升序排序的功能。进入sort,代码进入到List类的sort方法,发现方法将入参list先转为了数组Object[],之后利用Arrays.sort进行排序。i.next();首先在这里思考一个问题为什么要转为数组,问题答案已经在方法的英文注释中说明白了。是为了避免直接对List的链表进行排序,从而耗费O(n2logn) 时间复杂度。

u012181546的博客 517

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java 集合中的排序算法浅析

java集合排序

weixin_52437323的博客 176

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java中的集合排序算法

通过该方法注释,查看到有三项值得关注的信息,大概意思是该方法实现了稳定且默认升序排序的功能。进入 sort,代码进入到 List 类的 sort 方法,发现方法将入参 list 先转为了数组 Object[],之后利用 Arrays.sort 进行排序。i.next();首先在这里思考一个问题为什么要转为数组,问题答案已经在方法的英文注释中说明白了。是为了避免直接对 List的链表进行排序,从而耗费 O(n2logn) 时间复杂度。

xxxzzzqqq_的博客 299

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

自学Java day47 手撕(被)几大经典排序算法 从jvav到架构师

排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。 下面采用 jvav 语言演示经典排序算法。 首先定义几个工具方法 //在数组ary中,使用位运算实现两数交换 //无需额外内存,且速度更快,不能自交 static void swap(int[] ary, int a, int b) { if (a == b) return; ary[a] = ary[a] ^ ary[b]; ...

qq_68286846的博客 487

浅析Java集合中的排序算法

通过该方法注释,查看到有三项值得关注的信息,大概意思是该方法实现了稳定且默认升序排序的功能。进入sort,代码进入到List类的sort方法,发现方法将入参list先转为了数组Object[],之后利用Arrays.sort进行排序。i.next();首先在这里思考一个问题为什么要转为数组,问题答案已经在方法的英文注释中说明白了。是为了避免直接对List的链表进行排序,从而耗费O(n2logn) 时间复杂度。

Java技术攻略的博客 284

数据结构与算法Java(六)——排序算法

不定期补充、修正、更新 sequence_list为个人创建的线性表结构 其中0元素当作哨兵 常见排序算法复杂度在文章末尾 目录 一、插入排序 1.直接插入 2.二分法插入 3.希尔排序 二、交换排序 1.冒泡排序 2.快速排序 三、选择排序 1.直接选择 2 四、归并排序 五、基数排序 一、插入排序 1.直接插入 原理: void Insert_Sort...

weixin_44568462的博客 685

万字长文浅析Java集合中的排序算法

复制代码通过该方法注释,查看到有三项值得关注的信息,大概意思是该方法实现了稳定且默认升序排序的功能。复制代码进入sort,代码进入到List类的sort方法,发现方法将入参list先转为了数组Object[],之后利用Arrays.sort进行排序。i.next();复制代码首先在这里思考一个问题为什么要转为数组,问题答案已经在方法的英文注释中说明白了。复制代码是为了避免直接对List的链表进行排序,从而耗费O(n2logn) 时间复杂度。

BASK2311的博客 262

数据结构几大排序(四)——简单选择排序

Java /** * @author LiuZhiguo * @date 2019/10/1 16:31 */ public class SelectSort { public static void selectSort(int[] arr, int n) { int i, j, mini; int temp; for (i=0;...

qq_42520986的博客 199

Java程序员必须掌握的8大排序算法

本文主要详解了Java语言的8大排序的基本思想以及实例解读,详细请看下文8种排序之间的关系: 1, 直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。(2)实例(3)用java实现public class insertSort { pu

Mike_ToUp 479

从此不再无序:八大排序算法总结(附Java、C源码)

前言 大家好!今天小编整理一下面试官常考的一大热点题型:“排序”。下面的文章将重点的几大排序做了解析,我们从冒泡、选择、插入、归并、快速、堆、计数和基数这八大经典的排序算法讲起,比如:希尔排序,在插入排序的基础上做了优化,本文就不在讲解,博客网站上有很多文章!!! 大部分公司都会注重查找和排序算法。应聘者可以在了解各种查找和排序算法的基础上,重点掌握二分查找、归并排序和快速排序。 还要对各种排序算法的时间、空间复杂度烂熟于心,了解它的优缺点。 我参考的文章有:十大经典排序算法总结(Java实现+动画)

x0919的博客 746

Java面试题考查频率最高的题

1、Math.round(12.5)和Math.round(-12.5)的值各是多少? 答案:13 、-12 2、有如下运行程序,其运行结果? String str1 = "hello word"; String str2 = "hello word"; String str3= "hello "+ newString("world"); System.out.println(str1==str2...

weixin_42230348的博客 502

几大排序思想(由javascript编写)

Hello!我是super喵二~~~今天练了几道面试题,突然觉得好久没有好好归纳 过排序算法了。以前都是用C/java编写排序,这次用js来总结下五大排序算法吧: 1、冒泡排序(常用及常考排序算法):   不用多说,冒泡就是一个一个浮上去~~~也就是说需要一个一个比较: <script type="text/javascript"> //冒泡排序,一次一次的相邻...

weixin_30716141的博客 87

数据结构几大排序(五)——快速排序

Java /** * @author LiuZhiguo * @date 2019/10/1 16:16 */ public class QuickSort { public static void quickSort(int[] arr,int low,int high){ int i,j,temp,t; if(low>high) ...

qq_42520986的博客 311
上一篇: 二叉树的非递归遍历方式(前序、中序和后序)
下一篇: HashMap源码剖析
versencoder
博客等级 码龄10年 30粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值