八大排序:Java实现八大排序及算法复杂度分析

目录

 

QUESTION:八大排序:Java实现八大排序及算法复杂度分析

ANSWER:

一:冒泡排序

1.算法分析

2.时间复杂度分析

3.代码

二:选择排序

1.算法分析

2.时间复杂度分析

3.代码

三:插入排序

1.算法分析

2.时间复杂度分析

3.代码

四:归并排序

1.算法分析

2.时间复杂度分析

3.代码

五:堆排序

1.算法分析

2.时间复杂度分析

3.代码

六:快速排序

1.算法分析

2.时间复杂度分析

3.代码


QUESTION:八大排序:Java实现八大排序及算法复杂度分析

ANSWER:

一:冒泡排序

1.算法分析

冒泡排序是对于一个数组,从第一个数开始,与下一个数进行比较,大的冒后面,小的冒前面,相邻元素依次比较,完成一次循环,继续下一次循环,直至数组有序。

图示:

2.时间复杂度分析

由于冒泡排序是两层for循环,所以T=O(n^2)。

3.代码

*** 冒泡排序*/
public class BubbleSort {public static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}/*** 比较相邻元素大小,每次缩减一* @param arr*/public static void bubbleSort(int []arr){if (arr==null){return;}for (int i = arr.length-1; i >0 ; i--) {for (int j = 0; j <i ; j++) {if (arr[j]>arr[j+1]){swap(arr,j,j+1);}}}}
}

 

 

二:选择排序

1.算法分析

选择排序是选择数组第一个元素假设为最小元素,与后面的所以元素比较,比其它元素大就交换位置,完成一次循环就从第二个元素开始依次上述过程比较,直至数组有序。

图示:

2.时间复杂度分析n^

由于选择排序两层for循环,所以T=O(n^2)。

3.代码

/*** 选择排序*/
public class SelectionSort {public static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}/*** 假设第一个值为最小元素,每次循环与后一个元素比较找到最小元素* @param arr*/public static void selectionSort(int []arr){if (arr==null){return;}for (int i = 0; i <arr.length-1 ; i++) {int min=i;for (int j = i+1; j <arr.length ; j++) {min=arr[j]<arr[min]?j:min;}swap(arr,i,min);}}
}

 

 

三:插入排序

1.算法分析

插入排序是从数组第二个元素开始,找前面的数,比较大小,如果前面的数大,就交换位置,然后继续向前比较,。每次从第几个元素开始遍历时都把较小的元素插入到该元素前面,使其前面数组有序,完成一次循环,继续循环下一个元素直至数组有序。

图示:

2.时间复杂度分析

由于插入排序两层for循环,T=O(n^2)。

3.代码

public class InsertionSort {public static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}public static void insertionSort(int []arr){if (arr==null){return;}for (int i = 1; i <arr.length ; i++) {for (int j = i-1; j>=0&&arr[j]>arr[j+1]; j--) {swap(arr,j,j+1);}}}
}

 

 

四:归并排序

1.算法分析

归并排序是利用二分的思想,不断的将数组进行分割为两部分,依次比较每部分的最小元素,将最小的元素放入辅助数组,直到所有元素都插入数组,完成排序。

图示:

2.时间复杂度分析

由于归并排序是合并的思想,所有T=O(n*logn)。

3.代码


public class MergeSort {/*** 将数组分段排序插入,然后归并排序* @param arr* @param l* @param m* @param r*/public static void merge(int []arr,int l,int m,int r){int []help=new int[r-l+1];int i=0;int p1=l;int p2=m+1;while (p1<=m&&p2<=r){help[i++]=arr[p1]<=arr[p2]?arr[p1++]:arr[p2++];}while (p1<=m){help[i++]=arr[p1++];}while (p2<=r){help[i++]=arr[p2++];}for (int j = 0; j <help.length ; j++) {arr[j+l]=help[j];}}/*** 递归进行分段归并* @param arr* @param l* @param r*/public static void mergeSort(int []arr,int l,int r){if (l>=r){return;}int mid=((r-l)>>1)+l;mergeSort(arr,l,mid);mergeSort(arr,mid+1,r);merge(arr,l,mid,r);}/*** 数组归并排序*/public static void mergeSort(int []arr){if (arr==null){return;}mergeSort(arr,0,arr.length-1);}
}

 

 

五:堆排序

1.算法分析

堆排序的思想是根据二叉树的大根堆和小根堆的概念形成,首先依照数组建立大根堆,之后为了防止某一个元素的变化而引起整个大根堆的变化,建立一个修改二叉树为大根堆的方法,该数组保持大根堆的排序。之后交换大根堆元素,得到有序数组。

图示:

2.时间复杂度分析

堆排序建立大根堆的过程,T=O(n*logn)。

3.代码

/*** 堆排序,大根堆,小根堆*/
public class HeapSort{/*** 建立大根堆,当孩子结点大于根结点进行交换,没有进行左右孩子结点的比较* @param arr* @param index*/public static void heapInsert(int []arr,int index){while(arr[index]>arr[(index-1)/2]){swap(arr,index,(index-1)/2);index=(index-1)/2;}}/*** 修改数组为大根堆* @param arr* @param index* @param size*/public static void heapModifiy(int []arr,int index,int size){int left=2*index+1;while(left<size){//兄弟之间结点排序int largest=arr[left+1]>arr[left]&&(left+1)<size?left+1:left;//孩子结点与根结点进行比较largest=arr[index]>arr[largest]?index:largest;if (largest==index) {break;}swap(arr,index,largest);index=largest;left=2*index+1;}}/*** 堆排序* @param arr*/public static void heapSort(int []arr){if (arr==null||arr.length==0) {return;}for (int i=0;i<arr.length ;i++ ) {heapInsert(arr,i);}int size=arr.length;swap(arr,0,--size);while(size>0){heapModifiy(arr,0,size);swap(arr,0,--size);}}public static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}
}

 

六:快速排序

1.算法分析

快速排序的基本思想是有荷兰国旗问题的相似,先是随机产生一个范围进行数组的划分,小于区域在左边,等于区域在中间,等于区域在右边,直至数组完成排序。

图示:

2.时间复杂度分析

快速排序T=O(n*logn)。

3.代码

/*** 快速排序*/
public class QuickSort {/***给定范围划分大于区域,等于区域,小于区域排序* @param arr* @param l* @param r* @return*/public static int[] partition(int[] arr, int l, int r) {int less = l - 1;int more = r;while (l < more) {if (arr[l] < arr[r]) {swap(arr,++less,l++);}else if (arr[l]==arr[r]){l++;}else{swap(arr,--more,l);}}swap(arr,more,r);return new int[]{less+1,more};}/*** 产生一个随机范围进行划分排序* @param arr* @param l* @param r*/public static void quickSort(int []arr,int l,int r){if (l<r){swap(arr, l+(int) (Math.random()*(r-l+1)),r);int []partition=partition(arr,l,r);quickSort(arr,l,partition[0]-1);quickSort(arr,partition[1]+1,r);}}/*** 快速排序* @param arr*/public static void quickSort(int []arr){if (arr==null){return;}quickSort(arr,0,arr.length-1);}public static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}
}

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网友:看完Jeff Dean新论文,我再也不相信大厂的鬼话了

来源&#xff1a;数学中国文字&#xff1a;乔叶配图 &#xff1a;乔叶排版&#xff1a;余弟宗璇「我相信他们得到的数字是准确的&#xff0c;他们确实做了工作并得到了结果…… 但这样真的好吗&#xff1f;」一名机器学习研究者的灵魂发问&#xff0c;今天成为了整个社区最热门…

CV未来在这68张图上?Google Brain深扒ImageNet:顶级模型全都预测失败

来源&#xff1a;新智元编辑&#xff1a;LRS【新智元导读】ImageNet的标签问题一直为人诟病&#xff0c;最近Google Brain全面分析了基准内遗留的历史问题&#xff0c;并找出了所有顶级模型全都预测失败的68张图片&#xff0c;或许未来CV想取得突破&#xff0c;先得攻破这68关&…

谷歌夺回AI画语权,机器的想象力达到全新高度,网友:DALL·E 2诞生一个月就过时了?...

来源&#xff1a;量子位在让AI搞创作这件事上&#xff0c;谷歌和OpenAI正面刚起来了。这不&#xff0c;震惊全网的DALLE 2才新鲜出炉一个月&#xff0c;谷歌就派出名为Imagen的选手来打擂台。直接上图对比&#xff0c;左边是谷歌Imagen选手眼中的“猫猫绊倒人类雕像”&#xff…

Linux安装MySQL的完整步骤并有关MySQL8.0版本的问题方法

目录 QUESTION:Linux安装MySQL的完整步骤? ANSWER: 一&#xff1a;使用wget 直接下载 二&#xff1a;安转软件源&#xff0c;将platform-and-version-specific-package-name 替换为你下载的rpm名 三&#xff1a;安装mysql服务端 四&#xff1a;首先启动mysql 五&#x…

研究遭质疑,Jeff Dean回应:我们本就不是为得到新SOTA,成本计算也搞错了

来源&#xff1a;机器之心编辑&#xff1a;杜伟、陈萍对于 Jeff Dean 的回复&#xff0c;你认同吗&#xff1f;昨日&#xff0c;整个社区最热门的话题无外乎是 reddit 上一名机器学习研究者对谷歌 AI 负责人 Jeff Dean 参与论文的质疑。这篇论文是《An Evolutionary Approach t…

全脑地图:单个记忆被拆分存储在多个相连的大脑区域

来源&#xff1a;神经生物学根据一项创新的脑域映射研究&#xff0c;单一的记忆被存储在许多连接的大脑区域。创新的脑成像研究表明&#xff0c;“记忆印记”&#xff0c;编码记忆的神经元集合&#xff0c;广泛分布&#xff0c;包括在以前没有意识到的区域。麻省理工学院皮考尔…

李德毅 | 新一代人工智能如何从传统人工智能中脱颖而出

来源&#xff1a;图灵人工智能 作者&#xff1a;李德毅 中国工程院院士、CAAI名誉理事长、主线科技首席科学家2021年4月10日&#xff0c;“吴文俊人工智能科学技术奖”十周年颁奖盛典在北京举办。颁奖典礼上&#xff0c;中国工程院院士、中国人工智能学会名誉理事长李德毅荣获…

【强基固本】现在的人工智能是否走上了数学的极端?

来源&#xff1a;知乎—谢凌曦地址&#xff1a;https://www.zhihu.com/question/519393525/answer/2430233113“强基固本&#xff0c;行稳致远”&#xff0c;科学研究离不开理论基础&#xff0c;人工智能学科更是需要数学、物理、神经科学等基础学科提供有力支撑&#xff0c;为…

智源发布线虫生命模型,超级人脑有望在未来15-30年实现

出品&#xff1a;CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;作者&#xff1a;田玮靖 5月31日&#xff0c;作为国际性、权威性、专业性和前瞻性的“内行AI盛会”——智源大会开幕&#xff0c;会上&#xff0c;智源研究院发布了其最新研究成果线虫生命模型——天宝…

Aquarium华人CEO分享:机器学习在自动驾驶中落地,核心不是模型,是管道

来源&#xff1a;AI科技评论作者&#xff1a;Peter Gao编译&#xff1a;刘冰一编辑&#xff1a;陈彩娴作者 Peter Gao 是 Aquarium 公司的联合创始人和首席执行官&#xff08;CEO&#xff09;&#xff0c;Aquarium 公司建立了寻找和修复深度学习数据集问题的工具。在 Aquarium …

数据科学中的 10 个重要概念和图表的含义

大数据文摘转载自数据派THU来源&#xff1a;DeepHub IMBA“当算法给你一条曲线时&#xff0c;一定要知道这个曲线的含义&#xff01;”1、偏差-方差权衡这是一个总是在机器学习最重要理论中名列前茅的概念。机器学习中的几乎所有算法&#xff08;包括深度学习&#xff09;都努力…

Java总结:Spring5框架(1)

Spring5框架&#xff08;1&#xff09; 一&#xff1a;什么是Spring? Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而&#xff0c;Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而…

专访|79岁图灵奖获得者迈克尔·斯通布雷克谈“数字经济”与“元宇宙”

迈克尔斯通布雷克&#xff08;Michael Stonebraker&#xff09;被誉为“世界上最重要的数据库专家之一”&#xff0c;是数据库领域的第4位图灵奖得主来源&#xff1a;数据观撰稿&#xff1a;黄玉叶编辑&#xff1a;蒲蒲如果说硅是未来的新型石油&#xff0c;那么数据就好比新型…

Windows下如何搭建Gradle环境?

QUESTION:Windows下如何搭建Gradle环境&#xff1f; 目录 QUESTION:Windows下如何搭建Gradle环境&#xff1f; ANSWER: 1.开发环境 2.安装步骤 (1)下载最新的Gradle压缩包 (2)解压下载的压缩包到指定位置,比如: (3)配置环境变量 3.测试配置是否成功 ANSWER: 1.开发环境…

2029年会实现通用人工智能吗?Gary Marcus「叫板」马斯克:赌十万美元如何?

来源&#xff1a;AI科技评论作者&#xff1a;王玥编辑&#xff1a;陈彩娴5月30日&#xff0c;世界级红人埃隆马斯克&#xff08;Elon Musk&#xff09;发了一条推文&#xff0c;称&#xff1a;2029年是关键的一年&#xff0c;如果那时候我们还没有实现通用人工智能&#xff08;…

Java总结:SpringBoot的使用cmd命令进行Gradle构建

QUESTION:SpringBoot的使用cmd命令进行Gradle构建 ANWSER: 目录 QUESTION:SpringBoot的使用cmd命令进行Gradle构建 ANWSER: 一&#xff1a;下载SpringBoot工程 二&#xff1a;CMD命令构建gradle 一&#xff1a;下载SpringBoot工程 打开&#xff1a;https://spring.io/pr…

Python之父Guido Van Rossum:炒作之火或将“摧毁” Web 3

来源&#xff1a;Yin Long Ma译者&#xff1a;核子可乐策划&#xff1a;刘燕去中心化互联网压根没戏&#xff0c;Web 3 开发者都是小丑&#xff1a;关于 Web 3&#xff0c;我们到底该相信什么&#xff1f;去中心化互联网是怎么回事&#xff1f;互联网源自 Web 1.0 时代&#xf…

Python:使用matplotlib进行绘图时中文变成乱码的解决

QUESTION:Python:使用matplotlib进行绘图时中文变成乱码的解决? ANSWER: 在绘图前加上下面的代码: plt.rcParams[font.sans-serif][SimHei] #用来正常显示中文标签 plt.rcParams[axes.unicode_minus]False #用来正常显示负号例子: from matplotlib import pyplot as plt pl…

两篇Nature最新研究成果:令细胞衰老的基因突变作用机制的新理论

来源&#xff1a;生物通研究人员发现&#xff0c;基因突变在人的一生中是缓慢积累的&#xff0c;从而导致70岁后血液形成发生巨大变化&#xff0c;这为衰老提供了一种新的理论。一项新的研究揭示了贯穿一生、在血液干细胞中缓慢积累的基因变化可能是导致70岁后血液生产发生巨大…

美国陆军:2045年20项新兴科技趋势报告

来源&#xff1a;硅谷智库 这份报告是美国陆军公布的一份长达35页的《2016-2045年新兴科技趋势报告》。它是美国在过去几年由政府机构、咨询机构、智囊团、科研机构等发表的32份科技趋势相关研究调查报告的基础上提炼形成的。通过对近700项科技趋势的综合比对分析&#xff…