安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

常见的排序算法选择,冒泡,插入,快速,归并

10月2日 乔了了投稿
  太久没看代码了,最近打算复习一下java,又突然想到了排序算法,就把几种常见的排序算法用java敲了一遍,这里统一将无序的序列从小到大排列。选择排序
  选择排序是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小元素,继续放在下一个位置,直到待排序元素个数为0。
  选择排序代码如下:
  publicvoidSelectsort(int〔〕arr){
  inttemp,
  for(inti0;i10;i){
  
  for(intji1;j10;j){
  if(arr〔j〕arr〔index〕)
  
  }
  temparr〔i〕;
  arr〔i〕arr〔index〕;
  arr〔index〕
  swap(arr,i,index);
  }
  System。out。print(经过选择排序后:);
  for(inti0;i10;i)
  System。out。print(arr〔i〕);
  System。out。println();
  }冒泡排序
  冒泡排序是一种比较基础的排序算法,其思想是相邻的元素两两比较,较大的元素放后面,较小的元素放前面,这样一次循环下来,最大元素就会归位,若数组中元素个数为n,则经过(n1)次后,所有元素就依次从小到大排好序了。整个过程如同气泡冒起,因此被称作冒泡排序。
  选择排序代码如下:
  publicvoidBubblesort(int〔〕arr){
  
  for(inti0;i9;i){
  for(intj0;j10i1;j){
  if(arr〔j〕arr〔j1〕){
  temparr〔j〕;
  arr〔j〕arr〔j1〕;
  arr〔j1〕
  swap(arr,j,j1);
  }
  }
  }
  System。out。print(经过冒泡排序后:);
  for(inti0;i10;i)
  System。out。print(arr〔i〕);
  System。out。println();
  }插入排序
  插入排序也是一种常见的排序算法,插入排序的思想是:创建一个与待排序数组等大的数组,每次取出一个待排序数组中的元素,然后将其插入到新数组中合适的位置,使新数组中的元素保持从小到大的顺序。
  插入排序代码如下:
  publicvoidInsertsort(int〔〕arr){
  intlengtharr。
  int〔〕arrsortnewint〔length〕;
  intcount0;
  for(inti0;i){
  if(count0){
  arrsort〔0〕arr〔0〕;
  }elseif(arr〔i〕arrsort〔count1〕){
  arrsort〔count〕arr〔i〕;
  }elseif(arr〔i〕arrsort〔0〕){
  insert(arr,arrsort,arr〔i〕,0,count);
  }else{
  for(intj0;jcount1;j){
  if(arr〔i〕arrsort〔j〕arr〔i〕arrsort〔j1〕){
  insert(arr,arrsort,arr〔i〕,j1,count);
  
  }
  }
  }
  
  }
  System。out。print(经过插入排序后:);
  for(inti0;i10;i)
  System。out。print(arrsort〔i〕);
  System。out。println();
  }
  publicvoidinsert(int〔〕arr,int〔〕arrsort,intvalue,intindex,intcount){
  for(i)
  arrsort〔i〕arrsort〔i1〕;
  arrsort〔index〕
  }快速排序
  快速排序的效率比冒泡排序算法有大幅提升。因为使用冒泡排序时,一次外循环只能归位一个值,有n个元素最多就要执行(n1)次外循环。而使用快速排序时,一次可以将所有元素按大小分成两堆,也就是平均情况下需要logn轮就可以完成排序。
  快速排序的思想是:每趟排序时选出一个基准值(这里以首元素为基准值),然后将所有元素与该基准值比较,并按大小分成左右两堆,然后递归执行该过程,直到所有元素都完成排序。
  publicvoidQuicksort(int〔〕arr,intleft,intright){
  if(leftright)
  
  inttemp,t;
  
  
  temparr〔left〕;
  while(ij){
  while(arr〔j〕tempij)
  j;
  while(arr〔i〕tempij)
  i;
  if(ij){
  tarr〔i〕;
  arr〔i〕arr〔j〕;
  arr〔j〕t;
  }
  }
  arr〔left〕arr〔i〕;
  arr〔i〕
  Quicksort(arr,left,i1);
  Quicksort(arr,i1,right);
  }归并排序
  归并排序是建立在归并操作上的一种有效的排序算法,归并排序对序列的元素进行逐层折半分组,然后从最小分组开始比较排序,每两个小分组合并成一个大的分组,逐层进行,最终所有的元素都是有序的。
  publicvoidMergesort(int〔〕arr,intleft,intright){
  if(rightleft0){
  int〔〕arr1newint〔(rightleft)21〕;
  int〔〕arr2newint〔(rightleft1)2〕;
  intj0;
  intk0;
  for(i){
  if(i(rightleft)2){
  arr1〔j〕arr〔i〕;
  }else{
  arr2〔k〕arr〔i〕;
  }
  }
  Mergesort(arr1,0,(rightleft)2);
  Mergesort(arr2,0,(rightleft1)2);
  Merge(arr1,arr2,arr);
  }
  }
  publicvoidMerge(int〔〕arr1,int〔〕arr2,int〔〕arr){
  inti0;
  intj0;
  intk0;
  intL1arr1。
  intL2arr2。
  while(iL1jL2){
  if(arr1〔i〕arr2〔j〕){
  arr〔k〕arr1〔i〕;
  i;
  }else{
  arr〔k〕arr2〔j〕;
  j;
  }
  k;
  }
  if(iL1){
  for(jL2;j)
  arr〔k〕arr2〔j〕;
  }else{
  for(iL1;i)
  arr〔k〕arr1〔i〕;
  }
  }
  归并排序这里我使用了left,right等变量,使其可以通用,并没有直接用数字表示那么明确,所以给出相关伪代码,便于理解。
  Mergesort(arr〔0。。。n1〕)
  输入:一个可排序数组arr〔0。。。n1〕
  输出:非降序排列的数组arr〔0。。。n1〕
  ifn1
  copyarr〔0。。。n21〕toarr1〔0。。。(n1)21〕确保arr1中元素个数arr2中元素个数
  对于总个数为奇数时,arr1比arr2中元素多一个;对于总个数为偶数时,没有影响
  copyarr〔n2。。。n1〕toarr2〔0。。。n21〕
  Mergesort(arr1〔0。。。(n1)21〕)
  Mergesort(arr2〔0。。。n21〕)
  Merge(arr1,arr2,arr)
  Merge(arr1〔0。。。p1〕,arr2〔0。。。q1〕,arr〔0。。。pq1〕)
  输入:两个有序数组arr1〔0。。。p1〕和arr2〔0。。。q1〕
  输出:将arr1与arr2两数组合并到arr
  inti0;j0;k0
  whileipandjqdo
  ifarr1〔i〕arr2〔j〕
  arr〔k〕arr1〔i〕
  ii1
  elsearr〔k〕arr2〔j〕;jj1
  kk1
  ifip
  copyarr2〔j。。。q1〕toarr〔k。。。pq1〕
  elsecopyarr1〔i。。。p1〕toarr〔k。。。pq1〕最后,完整代码如下:
  packagetest1;
  importjava。util。S
  publicclassTest01{
  publicstaticvoidmain(String〔〕args){
  ScannerscnewScanner(System。in);
  int〔〕arr1newint〔10〕;
  for(inti0;i10;i)
  arr1〔i〕sc。nextInt();
  Sortdemo1newSort();
  15一次只能运行一个,若多个同时运行,则只有第一个有效,后面几个是无效排序。因为第一个运行的已经将带排序数组排好序。
  demo1。Selectsort(arr1);1
  demo1。Bubblesort(arr1);2
  3
  demo1。Quicksort(arr1,0,arr1。length1);
  System。out。print(经过快速排序后:);
  for(inti0;i10;i)
  System。out。print(arr1〔i〕);
  System。out。println();
  demo1。Insertsort(arr1);4
  5
  demo1。Mergesort(arr1,0,arr1。length1);
  System。out。print(经过归并排序后:);
  for(inti0;i10;i)
  System。out。print(arr1〔i〕);
  System。out。println();
  }
  }
  classSort{
  publicvoidswap(intarr〔〕,inta,intb){
  
  tarr〔a〕;
  arr〔a〕arr〔b〕;
  arr〔b〕t;
  }
  publicvoidSelectsort(int〔〕arr){
  inttemp,
  for(inti0;i10;i){
  
  for(intji1;j10;j){
  if(arr〔j〕arr〔index〕)
  
  }
  temparr〔i〕;
  arr〔i〕arr〔index〕;
  arr〔index〕
  swap(arr,i,index);
  }
  System。out。print(经过选择排序后:);
  for(inti0;i10;i)
  System。out。print(arr〔i〕);
  System。out。println();
  }
  publicvoidBubblesort(int〔〕arr){
  
  for(inti0;i9;i){
  for(intj0;j10i1;j){
  if(arr〔j〕arr〔j1〕){
  temparr〔j〕;
  arr〔j〕arr〔j1〕;
  arr〔j1〕
  swap(arr,j,j1);
  }
  }
  }
  System。out。print(经过冒泡排序后:);
  for(inti0;i10;i)
  System。out。print(arr〔i〕);
  System。out。println();
  }
  publicvoidQuicksort(int〔〕arr,intleft,intright){
  if(leftright)
  
  inttemp,t;
  
  
  temparr〔left〕;
  while(ij){
  while(arr〔j〕tempij)
  j;
  while(arr〔i〕tempij)
  i;
  if(ij){
  tarr〔i〕;
  arr〔i〕arr〔j〕;
  arr〔j〕t;
  }
  }
  arr〔left〕arr〔i〕;
  arr〔i〕
  Quicksort(arr,left,i1);
  Quicksort(arr,i1,right);
  }
  publicvoidInsertsort(int〔〕arr){
  intlengtharr。
  int〔〕arrsortnewint〔length〕;
  intcount0;
  for(inti0;i){
  if(count0){
  arrsort〔0〕arr〔0〕;
  }elseif(arr〔i〕arrsort〔count1〕){
  arrsort〔count〕arr〔i〕;
  }elseif(arr〔i〕arrsort〔0〕){
  insert(arr,arrsort,arr〔i〕,0,count);
  }else{
  for(intj0;jcount1;j){
  if(arr〔i〕arrsort〔j〕arr〔i〕arrsort〔j1〕){
  insert(arr,arrsort,arr〔i〕,j1,count);
  
  }
  }
  }
  
  }
  System。out。print(经过插入排序后:);
  for(inti0;i10;i)
  System。out。print(arrsort〔i〕);
  System。out。println();
  }
  publicvoidinsert(int〔〕arr,int〔〕arrsort,intvalue,intindex,intcount){
  for(i)
  arrsort〔i〕arrsort〔i1〕;
  arrsort〔index〕
  }
  publicvoidMergesort(int〔〕arr,intleft,intright){
  if(rightleft0){
  int〔〕arr1newint〔(rightleft)21〕;
  int〔〕arr2newint〔(rightleft1)2〕;
  intj0;
  intk0;
  for(i){
  if(i(rightleft)2){
  arr1〔j〕arr〔i〕;
  }else{
  arr2〔k〕arr〔i〕;
  }
  }
  Mergesort(arr1,0,(rightleft)2);
  Mergesort(arr2,0,(rightleft1)2);
  Merge(arr1,arr2,arr);
  }
  }
  publicvoidMerge(int〔〕arr1,int〔〕arr2,int〔〕arr){
  inti0;
  intj0;
  intk0;
  intL1arr1。
  intL2arr2。
  while(iL1jL2){
  if(arr1〔i〕arr2〔j〕){
  arr〔k〕arr1〔i〕;
  i;
  }else{
  arr〔k〕arr2〔j〕;
  j;
  }
  k;
  }
  if(iL1){
  for(jL2;j)
  arr〔k〕arr2〔j〕;
  }else{
  for(iL1;i)
  arr〔k〕arr1〔i〕;
  }
  }
  }
  若有错误,麻烦指正,不胜感激。
投诉 评论 转载

京医通停运风波再为互联网医疗敲警钟业内学者公共服务产品可探索每经记者:林姿辰每经编辑:魏官红日前,一则关于京医通即将停运的通知在网上流传。该预约挂号平台运营方北京怡合春天科技有限公司表示,公司独立负担该公益项目数亿元成本长达七年之……买手机线上买和线下买有何区别?手机店老板告诉你真相在五年前,学长买手机的方式一直都是线下,因为认识不少线下手机店老板,所以会当面去拿货验机更方便,到五年后的今天,我买手机已经完全从线上渠道购入了,那么线下买手机和线上买手机究竟……tomcat性能调优java性能优化原则:代码运算性能内存回收应用配置(影响java程序注意原因是垃圾回收)代码层优化:避免过多的循环嵌套调用和复杂逻辑Tomcat调优主要内容1……光芒都留给了Note9系列,网友Note10系列会没压力?一直以来,竞争不仅仅局限于不同品牌,自家品牌旗下的产品也免不了对比。就在今天,红米官方的官宣了redmiNote系列全球销量突破2亿台出货数据,本以为这应该是除了520最好听的……两大旗舰发布前瞻荣耀Magic3与小米MIX4外观设计,谁更2021年,中国智能手机市场的下半场,即将迎来两款高端旗舰。它们是8月10日登场的小米MIX4,以及8月12日发布的荣耀Maigc3。从小米和荣耀对两款产品的造势力度,就……常见的排序算法选择,冒泡,插入,快速,归并太久没看代码了,最近打算复习一下java,又突然想到了排序算法,就把几种常见的排序算法用java敲了一遍,这里统一将无序的序列从小到大排列。选择排序选择排序是一种简单直观……富邦华一银行与蚂蚁链合作,助力供应链金融数字化升级12月2日,富邦华一银行与蚂蚁集团蚂蚁链签署合作协议,双方将围绕区块链金融展开深度合作,以数字技术支撑银行的数字化转型,为台商提供优质金融服务,助力产业升级和实体经济发展。……人民日报点名国产企业,用户不应该是被骗来的众所周知,随着移动互联网的普及,越来越多的用户都体验到了智能时代带给我们的便利。比如方便的移动支付、足不出户的网络购物等等。不可否认,这些软件都给我们带来了很多的便利,但是与此……安全第一,Smart4u蓝牙版骑行头盔实在是太酷了自从上次我从电动滑板车上摔下来以后,就一直惦记着买一套护具。护具当中头盔可是最重要的,挑选过程中发现了Smart4u的这款头盔(EH10B),不仅安全,还有蓝牙通话功能加持,科……四步夯实网络安全基础随着我国经济社会持续发展,信息化程度越来越高,人们的工作、生活和学习早已和互联网、各类信息化平台深度融合。作为新时代经济发展建设的强心剂,新基建为推进我国数字经济发展奠定了基础……推动元宇宙发展的7大技术摘要元宇宙是3D数字世界概念,由虚拟空间构成,个人通过创建的虚拟化身即可在其中探索遨游。人们能在元宇宙中玩游戏、购物,与好友在虚拟咖啡店闲聚,和同事在虚拟办公室中协作等等……三星今年可能推出第三个折叠屏产品系列到目前为止,三星已推出GalaxyZFold和ZFlip两个折叠屏产品系列。国外数码论坛的一份报告表明,可能会有第三个折叠屏产品正在筹备中。按更新规律看,ZFold4和ZFli……
四川线在科技有限公司荣获2021年度网络推广服务一等奖关于嗅觉的一项研究当下续航极佳的5款手机,出门不用带充电宝,可满足一整天的使用不仅亮寿命更长当贝F3投影让你拒绝后顾之忧vivoNEX系列即将更新骁龙898屏下摄像头,明年一季度发小米11U安卓之光的使用评测传统行业pk互联网大厂,何去何从?盘点未来两年增速有望超20的6大科技龙头,中国科技真的太棒了助听器戴着老是响是怎么回事?苹果库克M2处理器完成开发,采用台积电4纳米工艺制程8点1氪豆瓣被约谈并罚款150万专家称发现马航MH370加拿摩托罗拉2亿像素旗舰手机真机图曝光全球首款骁龙8Plus旗舰写母爱让我感动的作文500字合集五篇宝宝感冒能吃芒果吗临时工受伤赔偿标准是什么?得了肝病需要忌口吗?遵循这2个原则,肝脏会感激你眉间竖纹(4种印堂的纹路)南方人为什么误以为北方人过年的年夜饭只吃饺子呢?海底两万里读后感优秀作文400字《儒林外史》第三十八回读书笔记戴尔XPS13二合一笔记本,国行上架,13999元起棉麻连衣裙2017女士连衣裙简约更大气(图)下载抖音视频有什么方法我来教你怎么快速江湖老师作文

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利