package cn.xbz;import java.util.Arrays;/*** 各种排序法的演示* @author xbz**/
public class ArraySort {public static void main(String[] args) {int[] arr = {1, 6, 0, -1, 9, -100, 90};//        Bubble.sort(arr);//冒泡排序
//        Select.sort(arr);//选择排序
//        Insert.sort(arr);//插入排序Quick.sort(arr, 0, arr.length - 1);//快速排序System.out.println(Arrays.toString(arr));}
}/*** 冒泡排序法:*  1.从数组开始依次对比相邻两个数的值,若前者较大则将换两者的数据,*  2.然后与下一位进行对比,直到比较到最后一位则找出最大值放在最后。*  3.之后从剩余的数据中再次循环*/
class Bubble {public static void sort(int[] arr) {long l1 = System.currentTimeMillis();/* 排序 *///外层循环,决定一共排几趟for (int i = 0; i < arr.length - 1; i++) {/* 内层循环,决定比较几次 */for (int j = 0; j < arr.length - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}long l2 = System.currentTimeMillis();System.out.println(l2 - l1);}
}/** 选择排序法*  1.选择数组的第一个数据为假定最小值(arr[minIndex]),*      依次从数组中找出最小的数赋值给arr[minIndex],*      从而找出最小的数据,将之与第一位的数据交换,则第一位的数据不再理会。*  2.再选择数组的第二位为假定最小值,再从剩余的数据中找出最小值与第二位交换,不再理会。*  3.循环往复,直至找到数组的倒数第二位即可(剩下的最后一位即是最大值)*/
class Select {public static void sort(int[] arr) {long l1 = System.currentTimeMillis();/* 外层循环控制交换的次数,即从第一位开始,到倒数第二位结束(arr.length-1) */for (int i = 0; i < arr.length - 1; i++) {int minIndex = i;//选择第一个数据为假定最小值,存储其下标索引/** 内层循环控制排序(i+1)轮后剩余的数据范围,因为排过序的不必理会,* 所以只需要从i的下一位到数组最后寻找出最小值即可*/for (int j = i + 1; j < arr.length; j++) {if (arr[minIndex] > arr[j]) {//若遇见假定最小值大于当前数据(arr[j])的时候,则说明假定最小值不是最小minIndex = j;//再存储当前数据下标作为最小值与剩余数据对比,全部对比完毕后,//minIndex的值就是剩余数据中最小值的索引}}/** 当退出内层for循环时,表示已经遍历并找到最小值的下标,* 此时将该数据与i的位置数据交换,下一轮不再参与对比* (即第一次从所有数据中找到最小值放到数组第一位,第二次从剩余中找到最小值放到第二位,循环往复)*/int temp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}long l2 = System.currentTimeMillis();System.out.println(l2 - l1);}
}/*** 插入排序法*  1.先从第二个值将值存入insertVal,开始依次与前一个值(arr[i-1])a对比,*  2.若小于前一个值a,则insertVal应该位于a之前,所以将a值后移一位,*      (此时后移位上的值已经存入insertVal中,所以不用担心被覆盖,而此时数组中则有两个a),*  3.然后将insertVal再与往前一个值(arr[i-2])b做比较,若小于b则继续将b后移,*      直到往前对比,与一个值x对比时insertVal大于x,则说明insertVal应位于x之后,*      将insertVal插入到x之后(index+1),再从插入位置的后一个开始存入insertVal继续比较循环,*  4.直到将最后一个数据插入到合适的位置,则数组排序完毕。* @author soft01**/
class Insert {public static void sort(int[] arr) {for (int i = 1; i < arr.length; i++) {int insertVal = arr[i];//从第二个值开始,先同当前值的前面对比int index = i - 1;//前面一个值的索引while (index >= 0 && insertVal < arr[index]) {//若小于前面一个值,//把前边一个值往后挪一位,再与前面一个值对比arr[index + 1] = arr[index];//此时index+1位置上的值已经存在insertVal中,所以不用担心被覆盖index--;//继续往前对比,若比前面的一个数大(或相等)时退出循环不再比较,}arr[index + 1] = insertVal;//最后将insertVal值在对比完毕后//(此时index所在的值比insertVal值小,而insertVal比之前比的值小)//吧insertVal的值插入该位置,再从insertVal后面的一个值开始继续一轮对比}}
}/*** 快速排序法*  1.通过一趟排序将要排序的数据分割成独立的两部分,*  2.其中一部分的数据都比另外一部分的所有数据都要小,*  3.然后再按此方法对这两部分数据分别进行快速排序,*  4.整个排序过程可以递归进行,以此达到整个数据变成有序序列。* @author soft01**/
class Quick {public static void sort(int[] arr, int low, int high) {int pos;if (low < high) {pos = FindPos(arr, low, high);sort(arr, low, pos - 1);sort(arr, pos + 1, high);}}public static int FindPos(int[] arr, int low, int high) {int val = arr[low];while (low < high) {while (low < high && arr[high] >= val) {--high;}arr[low] = arr[high];while (low < high && arr[low] < val) {++low;}arr[high] = arr[low];}arr[low] = val;return low;}
}

另外 , 有人做了一个动画版的各种算法的演示 , 更直观形象 ,大家可以移步观看H5实现各种排序算法动画

Java中常见的排序算法代码演示相关推荐

  1. java冒泡排序_Java专题(二):Java中常见的排序算法有哪些?---冒泡排序

    排序相关的的基本概念排序: 将一组杂乱无章的数据按一定的规律顺次排列起来. 数据表( data list): 它是待排序数据对象的有限集合. 排序码(key):通常数据对象有多个属性域,即多个数据成员 ...

  2. java 排序_Java中常见的排序算法有哪些?---选择排序

    排序相关的的基本概念 排序: 将一组杂乱无章的数据按一定的规律顺次排列起来. 数据表( data list): 它是待排序数据对象的有限集合. 排序码(key):通常数据对象有多个属性域, 即多个数据 ...

  3. java中queue排序_Java中常见的排序算法有哪些?---选择排序

    排序相关的的基本概念 排序: 将一组杂乱无章的数据按一定的规律顺次排列起来. 数据表( data list): 它是待排序数据对象的有限集合. 排序码(key):通常数据对象有多个属性域, 即多个数据 ...

  4. java 中的排序_浅谈java中常见的排序

    浅谈java中常见的排序 学过java的人都知道,排序这一部分初次接触感觉还是有点难以理解,很多地方也会用到.然而,在java中常见的排序方法:冒泡排序,选择排序,插入排序等等.下面就让我们一起揭开他 ...

  5. java 排序算法面试题_面试题: java中常见的排序算法的实现及比较

    1.冒泡排序 1.1 冒泡排序普通版 每次冒泡过程都是从数列的第一个元素开始,然后依次和剩余的元素进行比较,若小于相邻元素,则交换两者位置,同时将较大元素作为下一个比较的基准元素,继续将该元素与其相邻 ...

  6. android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些

    学Java能拿高薪吗?Java中常见排序算法有哪些?作为老牌编程语言,Java拥有广阔的市场占有率,几乎90%以上的大中型互联网应用系统在服务端开发都会首选Java.为了加入到Java这一高薪行业,很 ...

  7. JS 常见的排序算法

    工作中算法不常用,但是排序经常用.因此在这里整理了几种JS中常见的排序算法. 冒泡排序 1.算法思想:判断两个相邻元素,大于则交换位置 2.算法步骤 从数组中第一个数开始,依次与下一个数比较并次交换比 ...

  8. java util 排序_Java中常见的排序方法

    本博主要介绍Java中几种常见的排序算法: /* 排序方法的演示 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分 ...

  9. 十大经典排序算法(动态演示+代码)

    时间复杂度是指程序执行函数或方法的效率常用大写的O表示,比如执行一个循环我们记做O(n),执行一个加法运算或者执行一个if操作我们记为O(1)​. ​ 时间.空间复杂度比较 1 冒泡排序 算法思想: ...

最新文章

  1. 源码安装tensorflow
  2. Redis+分布式+设计模式+Spring全家桶+Dubbo阿里P8技术精选文档
  3. stm32f4之GPIO
  4. 【Protocol Buffer】Protocol Buffer入门教程(七):导入定义
  5. [第一财经周刊] 疯狂的团购
  6. 常见windows 2000系统进程描述
  7. unity应用开发实战案例_Unity游戏案例开发大全 (吴亚峰等著) 完整pdf高清版[31MB]...
  8. 从N个元素中选择第i小的元素
  9. 【2018.4.7】模拟赛之一-ssl2382 K好数【数位dp】
  10. mysql的socket文件下载,mysql下的socket文件作用
  11. JMeter:生成漂亮的多维度的HTML报告
  12. php fpm 报错,PHP-FPM安装报错解决
  13. comsol通直流电_基于COMSOL仿真的高压直流交联聚乙烯(XLPE)电缆附件设计
  14. 2014年腾讯实习生招聘最后一题
  15. react 使用recoil 减少不必要的组件渲染
  16. 寻找那些神奇的自幂数---C语言
  17. 计算机专业的在职考研,2019年深造北京航空航天大学在职研究生计算机专业在职考研科目是什么...
  18. 学习java随堂练习-20220617
  19. 清空数据库表结构的几种方式
  20. 抖音文案标题怎么写,抖音标题怎么写才能上热门:国仁楠哥

热门文章

  1. MySQL5.7的配置文件
  2. 信息安全系统设计基础第四周学习总结—20135227黄晓妍
  3. 高质量程序设计指南c++/c语言(25)--类与内联函数
  4. jQuery -- 目录
  5. 「ECharts」主题这样配置才能更绚丽
  6. 计算机编码简介(ASCII、ANSI、EBCDIC、Unicode)
  7. 卢克增加服务器,DNF卢克攻坚服务器优化:增加攻坚队频道,新跨区整合计划
  8. mariadb mysql 配置文件_Mariadb配置文件优化参数(仅供参考)
  9. java socket 读取文件_Java中Socket下载一个文本文件
  10. flask使用第三方云通讯平台时,出现{'172001':'网络错误'}解决方法