范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

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

  太久没看代码了,最近打算复习一下java,又突然想到了排序算法,就把几种常见的排序算法用java敲了一遍,这里统一将无序的序列从小到大排列。选择排序
  选择排序是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小元素,继续放在下一个位置,直到待排序元素个数为0。
  选择排序代码如下:
  public void Select_sort(int[] arr) {
  int temp,index;
  for( int i=0;i<10;i++) {
  index = i;
  for(int j = i + 1 ; j < 10 ; j++) {
  if(arr[j] < arr[index])
  index = j;
  }
  /*
  temp = arr[i];
  arr[i] = arr[index];
  arr[index] = temp;
  */
  swap(arr,i,index);
  }
  System.out.print("经过选择排序后:");
  for(int i = 0 ; i < 10 ; i++)
  System.out.print( arr[i] +" ");
  System.out.println("");
  } 冒泡排序
  冒泡排序是一种比较基础的排序算法,其思想是相邻的元素两两比较,较大的元素放后面,较小的元素放前面,这样一次循环下来,最大元素就会归位,若数组中元素个数为n,则经过(n-1)次后,所有元素就依次从小到大排好序了。整个过程如同气泡冒起,因此被称作冒泡排序。
  选择排序代码如下:
  public void Bubble_sort(int[] arr) {
  int temp;
  for(int i = 0 ; i < 9 ; i++) {
  for(int j = 0 ; j < 10 - i - 1 ;j++) {
  if(arr[j] > arr[j+1]) {
  /*
  temp = arr[j];
  arr[j] = arr[j+1];
  arr[j+1] = temp;
  */
  swap(arr,j,j+1);
  }
  }
  }
  System.out.print("经过冒泡排序后:");
  for(int i = 0 ; i < 10 ; i++)
  System.out.print( arr[i] +" ");
  System.out.println("");
  } 插入排序
  插入排序也是一种常见的排序算法,插入排序的思想是:创建一个与待排序数组等大的数组,每次取出一个待排序数组中的元素,然后将其插入到新数组中合适的位置,使新数组中的元素保持从小到大的顺序。
  插入排序代码如下:
  public void Insert_sort(int[] arr) {
  int length = arr.length;
  int[] arr_sort = new int[length];
  int count = 0;
  for(int i = 0;i < length; i++) {
  if(count == 0) {
  arr_sort[0] = arr[0];
  }else if(arr[i] >= arr_sort[count - 1]) {
  arr_sort[count] = arr[i];
  }else if(arr[i] < arr_sort[0]) {
  insert(arr,arr_sort,arr[i],0,count);
  }else {
  for(int j = 0;j < count - 1; j++) {
  if(arr[i] >= arr_sort[j] && arr[i] < arr_sort[j+1]) {
  insert(arr,arr_sort,arr[i],j+1,count);
  break;
  }
  }
  }
  count++;
  }
  System.out.print("经过插入排序后:");
  for(int i = 0 ; i < 10 ; i++)
  System.out.print( arr_sort[i] +" ");
  System.out.println("");
  }
  public void insert(int[] arr,int[] arr_sort,int value,int index,int count) {
  for(int i = count; i > index; i--)
  arr_sort[i] = arr_sort[i-1];
  arr_sort[index] = value;
  } 快速排序
  快速排序的效率比冒泡排序算法有大幅提升。因为使用冒泡排序时,一次外循环只能归位一个值,有n个元素最多就要执行(n-1)次外循环。而使用快速排序时,一次可以将所有元素按大小分成两堆,也就是平均情况下需要logn轮就可以完成排序。
  快速排序的思想是:每趟排序时选出一个基准值(这里以首元素为基准值),然后将所有元素与该基准值比较,并按大小分成左右两堆,然后递归执行该过程,直到所有元素都完成排序。
  public void Quick_sort(int[] arr, int left, int right) {
  if(left >= right)
  return ;
  int temp,t;
  int j = right;
  int i = left;
  temp = arr[left];
  while(i < j) {
  while(arr[j] >= temp && i < j)
  j--;
  while(arr[i] <= temp && i < j)
  i++;
  if(i < j) {
  t = arr[i];
  arr[i] = arr[j];
  arr[j] = t;
  }
  }
  arr[left] = arr[i];
  arr[i] = temp;
  Quick_sort(arr,left, i - 1);
  Quick_sort(arr, i + 1, right);
  } 归并排序
  归并排序是建立在归并操作上的一种有效的排序算法,归并排序对序列的元素进行逐层折半分组,然后从最小分组开始比较排序,每两个小分组合并成一个大的分组,逐层进行,最终所有的元素都是有序的。
  public void Mergesort(int[] arr,int left,int right) {
  if(right - left > 0) {
  int[] arr_1 = new int[(right - left)/2 + 1];
  int[] arr_2 = new int[(right - left + 1)/2];
  int j = 0;
  int k = 0;
  for(int i = left;i <= right;i++) {
  if(i <= (right + left)/2) {
  arr_1[j++] = arr[i];
  }else {
  arr_2[k++] = arr[i];
  }
  }
  Mergesort(arr_1,0,(right - left)/2);
  Mergesort(arr_2,0,(right - left - 1)/2);
  Merge(arr_1,arr_2,arr);
  }
  }
  public void Merge(int[] arr_1,int[] arr_2,int[] arr) {
  int i = 0;
  int j = 0;
  int k = 0;
  int L1 = arr_1.length;
  int L2 = arr_2.length;
  while(i < L1 && j < L2) {
  if(arr_1[i] <= arr_2[j]) {
  arr[k] = arr_1[i];
  i++;
  }else {
  arr[k] = arr_2[j];
  j++;
  }
  k++;
  }
  if(i == L1) {
  for(int t = j;j < L2;j++)
  arr[k++] = arr_2[j];
  }else {
  for(int t = i;i < L1;i++)
  arr[k++] = arr_1[i];
  }
  }
  归并排序这里我使用了left,right等变量,使其可以通用,并没有直接用数字表示那么明确,所以给出相关伪代码,便于理解。
  Mergesort(arr[0...n-1])
  //输入:一个可排序数组arr[0...n-1]
  //输出:非降序排列的数组arr[0...n-1]
  if n>1
  copy arr[0...n/2-1] to arr_1[0...(n+1)/2-1]//确保arr_1中元素个数>=arr_2中元素个数
  //对于总个数为奇数时,arr_1比arr_2中元素多一个;对于总个数为偶数时,没有影响
  copy arr[n/2...n-1] to arr_2[0...n/2-1]
  Mergesort(arr_1[0...(n+1)/2-1])
  Mergesort(arr_2[0...n/2-1])
  Merge(arr_1,arr_2,arr)
  Merge(arr_1[0...p-1],arr_2[0...q-1],arr[0...p+q-1])
  //输入:两个有序数组arr_1[0...p-1]和arr_2[0...q-1]
  //输出:将arr_1与arr_2两数组合并到arr
  int i<-0;j<-0;k<-0
  while i

arr[j+1]) {   /*   temp = arr[j];   arr[j] = arr[j+1];   arr[j+1] = temp;   */   swap(arr,j,j+1);   }   }   }   System.out.print("经过冒泡排序后:");   for(int i = 0 ; i < 10 ; i++)   System.out.print( arr[i] +" ");   System.out.println("");   }   public void Quick_sort(int[] arr, int left, int right) {   if(left >= right)   return ;   int temp,t;   int j = right;   int i = left;   temp = arr[left];   while(i < j) {   while(arr[j] >= temp && i < j)   j--;   while(arr[i] <= temp && i < j)   i++;   if(i < j) {   t = arr[i];   arr[i] = arr[j];   arr[j] = t;   }   }   arr[left] = arr[i];   arr[i] = temp;   Quick_sort(arr,left, i - 1);   Quick_sort(arr, i + 1, right);   }   public void Insert_sort(int[] arr) {   int length = arr.length;   int[] arr_sort = new int[length];   int count = 0;   for(int i = 0;i < length; i++) {   if(count == 0) {   arr_sort[0] = arr[0];   }else if(arr[i] >= arr_sort[count - 1]) {   arr_sort[count] = arr[i];   }else if(arr[i] < arr_sort[0]) {   insert(arr,arr_sort,arr[i],0,count);   }else {   for(int j = 0;j < count - 1; j++) {   if(arr[i] >= arr_sort[j] && arr[i] < arr_sort[j+1]) {   insert(arr,arr_sort,arr[i],j+1,count);   break;   }   }   }   count++;   }   System.out.print("经过插入排序后:");   for(int i = 0 ; i < 10 ; i++)   System.out.print( arr_sort[i] +" ");   System.out.println("");   }   public void insert(int[] arr,int[] arr_sort,int value,int index,int count) {   for(int i = count; i > index; i--)   arr_sort[i] = arr_sort[i-1];   arr_sort[index] = value;   }   public void Mergesort(int[] arr,int left,int right) {   if(right - left > 0) {   int[] arr_1 = new int[(right - left)/2 + 1];   int[] arr_2 = new int[(right - left + 1)/2];   int j = 0;   int k = 0;   for(int i = left;i <= right;i++) {   if(i <= (right + left)/2) {   arr_1[j++] = arr[i];   }else {   arr_2[k++] = arr[i];   }   }   Mergesort(arr_1,0,(right - left)/2);   Mergesort(arr_2,0,(right - left - 1)/2);   Merge(arr_1,arr_2,arr);   }   }   public void Merge(int[] arr_1,int[] arr_2,int[] arr) {   int i = 0;   int j = 0;   int k = 0;   int L1 = arr_1.length;   int L2 = arr_2.length;   while(i < L1 && j < L2) {   if(arr_1[i] <= arr_2[j]) {   arr[k] = arr_1[i];   i++;   }else {   arr[k] = arr_2[j];   j++;   }   k++;   }   if(i == L1) {   for(int t = j;j < L2;j++)   arr[k++] = arr_2[j];   }else {   for(int t = i;i < L1;i++)   arr[k++] = arr_1[i];   }   }   }   若有错误,麻烦指正,不胜感激。


使用jdbc操作SQLite数据库(Kotlin版)服务端可以使用Sqlite数据库吗?当然是可以的。SQLite在小中型流量的网站上还是可以用的。通常情况下,每天点击量在100K(10万)以下是完全没有问题的。首先要添加依赖包de使用Nginx实现负载均衡一负载均衡的作用1转发功能按照一定的算法权重轮询,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。2故障移除通过心跳检测的方式,判断应用服务器当前是否可以正C模板元编程系列专题3模板偏特化前置知识C模板元编程系列专题1入门知乎C模板元编程系列专题2模板特化的概念从何而来知乎1模板全特化模板,代表了一种泛化的语义。显然,既然有泛化语义,就应当有特化语义。特化,使得我们电视机顶盒总是系统内存不足重启怎么解决?就是没有机顶盒也可以看电视,有线电视也没有竞争优势,将很快被淘汰。我家的智能电视购于2017年。以前只知道在首页可以看免费的,但都是很久前的。看电视连续剧或电影在云视听付费。今年才跨境易支付应用案例发布本报记者张志伟见习记者张博2月11日,中国工程院中国区块链发展战略研究项目发布发现100个中国区块链创新应用栏目之跨境易支付应用案例。据了解,为响应一带一路国家战略,为走出去的中资摄影小白购买相机时,应该一步到位呢,还是从入门级开始呢?摄影小白购买相机时,应该一步到位呢,还是从入门级开始?摄影小白,应该是指对摄影知识技术和技巧一知半解,却又有浓厚兴趣爱好的新手。那么,既然是新手,总会遇到这样或那样的问题,其中,对三星GalaxyS22和TabS8支持通过GoogleDuo分享画面DoNews2月10日消息(刘文轩)苹果在iOSiPadOS15中加入的SharePlay功能,如今在Android阵营中也已经出现,除了Google自家的Pixel手机,三星刚刚MetaWorld突破想象极限创造自由社区元宇宙作为人类的一种新的文明形态出现,开创了新的经济体,促进人类社会发展。MetaWorld抓住了这个时代机遇,将对人类社会进步人类文明进步产生巨大的价值。立足于区块链数字时代,以别瞎扯!眯眯眼根本不是东方美,魅族汉服海报,才是正确操作中西方由于文化差异的不同,造成了不一样的审美方式。最近眯眯眼这个词就引发了很大的争议,原因就是有些品牌为了迎合西方的审美方式,特意用妆容让模特拥有一双狭窄细长的眼睛,造成外界对东方手慢无海信85吋4K大屏电视到手价7949元超值海信E7G系列有着极高的性价比和出色的配置表现,包含55英寸65英寸75英寸85英寸等版本,本期为大家推荐的是85吋版本。目前这款电视参加每满8700减800,叠加页面50元优惠券购买退款,再取消退货退款留下商品,两个大专生骗了京东16万谢承和张永刚同岁还是同学,22岁的年纪,大专毕业后没有工作。为了赚钱,谢承利用10个月的时间做了一件事。他向其他人购买了数十个京东购物平台账号,包括个人身份信息等资料。然后通过登录
SmartToolsPro今天推荐一款全是实用功能的安卓手机端app,它能解决N多生活中遇到的麻烦,堪称全能级!软件名为SmartToolsPro,它是一款强大的工具箱。它的功能涉及到生活中的方方面面,不仅iphone13支持无线充电吗iphone13支持反向充电吗iPhone13全系列是支持无线充电的,为用户带来更安全更方便的充电体验。那么iPhone13是否支持无线反向充电呢,在使用的时候我们怎么开启反向充电功能?不知道的小伙伴可以跟小编细数那些年科技厂商们的打脸设计机哥这几天刷友圈,诶,满世界都是新MacBookPro。不过,看着这新款的MacBook,机哥心里五味杂全兜兜转转这么多年,苹果终究是方向对了。饱受争议的TouchBar没了,SD睿思芯科创始人兼CEO谭章熹RISCEDGE睿思芯科创始人兼CEO谭章熹当芯片半导体遇上元宇宙,会碰撞出怎样的火花?12月9日下午,在钛媒体集团联合大兴产促中心国家新媒体产业基地共同主办的2021TEDGE全球创新大会上,睿三安光电VS京东方A两分钟看完他们说的两个LED企业4年的财务数据今天一起来看看他们从17年到20年的财务报表情况(单位)三安光电国内最大全色系超高亮度LED芯片生产企业,国内光电领域龙头京东方A全球领先的半导体显示技术产品与服务提供商1应收账款探讨全球科学趋势讲好湾区科技故事南方日报讯(记者卞德龙)12月11日,以探索未来共享科学为主题的2021年大湾区科学论坛将在广州开幕。日前,广州地标建筑广州塔为论坛亮灯,向来自全球的超百名与会院士专家表示欢迎。在SpringBoot统一处理全局异常注解的介绍ControllerAdviceControllerAdvice注解是Spring3。2中新增的注解,学名是Controller增强器,作用是给Controller控制器为啥现在很多人选择国产手机,而不是iPhone和三星了呢?原因简单而残酷,就一个字穷!穷肯定是穷呗。因为没钱穷我没选择国产,我用苹果,因为我需要ARkit2。0开发包,国产机是安卓系统,没有这玩意,ARCore还是远远赶不上苹果的ARKi5000元以上的手机,到底好在哪?好在配置,用料好在这种手机体现了现在科技的进步5K以上就完全属于旗舰机型了,所以题主问的就是高端机和中低端机的区别。高端机溢价其实比较大,因为它的价值已经不止体现在通讯工具上,更是华为高管Mate50已备好!5200mAh,HarmonyOS3板上钉钉在5G芯片遭遇困难之后,我们看到华为还是坚持做手机业务,不过可以明显看到的是,华为放在手机业务上的精力逐渐减少了。毕竟没有5G销量上就得不到保证,这种情况下华为把更多精力放在通讯系华为鸿蒙HarmonyOS5G新机入网信息公布,最高1TB存储IT之家12月8日消息,此前一款型号为NOHAN50的华为鸿蒙HarmonyOS5G新机获得入网许可。现在,该机的入网信息已经公布。根据公布的信息,这款5G新机拥有黑白两种配色,搭