JAVA最常用的排序_冒泡排序、选择排序、快速排序
来源:互联网 发布:dpp软件 mac 编辑:程序博客网 时间:2024/05/21 05:07
排序算法是Java面试题中最常考的,笔试题、机试题都会有,所有掌握最常用的排序是必须。
在效率中快速排序是这几种效率最高的。
代码验证过,可以直接复制测试运行。
代码如下:
package com.lcx.interview;import java.util.Arrays;/** * * @author qq1013985957 */public class Interview_9_Sort {public static void main(String[] args) {long begion;long end;int[] a = ArraySort.randomArray(5000, 4);int[] a2 = ArraySort.randomArray(5000, 4);int[] a3 = ArraySort.randomArray(5000, 4);begion = System.currentTimeMillis();ArraySort.bubbleUp(a);end = System.currentTimeMillis();System.out.println("冒泡排序时间(毫秒):"+(end-begion));System.out.println(Arrays.toString(a));begion = System.currentTimeMillis();ArraySort.chooseSort(a2);end = System.currentTimeMillis();System.out.println("选择排序时间(毫秒):"+(end-begion));System.out.println(Arrays.toString(a2));begion = System.currentTimeMillis();ArraySort.fastSort(a3, 0, a3.length-1);end = System.currentTimeMillis();System.out.println("快速排序时间(毫秒):"+(end-begion));System.out.println(Arrays.toString(a3));}}class ArraySort{/** * 冒泡排序算法: * 俩俩比较,如果a[x]>a[x+1] 就交换值,这是升序排序,将大值一直冒泡到最后面。 * 第一轮将最大值冒泡到最后一位,然后此数不在参与比较。 * 第二轮将剩余的最大值冒泡到倒数第二位,然后此数不在参与比较。 * 。。。 * 反之这是降序冒泡,把最小值的冒泡到最后。 * @param a */public static void bubbleUp(int[] a){for(int i=0;i<a.length-1;i++){//这里可以少循环一次,最后一轮剩1个数内循环不在循环了,外循环是控制循环次数的。for(int j=0;j<a.length-i-1;j++){//内循环,进行冒泡if(a[j]>a[j+1]){int temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}}}/** * 选择排序算法: * 第一个数和后面所有数进行比较,取最小值(升序)/取最大值(降序)。 * 同样,然后第二个数和后面所有数进行比较,取最值。 * * @param a */public static void chooseSort(int[] a){for (int i = 0; i < a.length; i++) {for (int j = i+1; j < a.length; j++) {if(a[i]>a[j]){int temp = a[j];a[j] = a[i];a[i] = temp;}}}}/** * 快速排序算法: * 快速排序简单的说就是选择一个基准,将比起大的数放在一边,小的数放到另一边。 * 对这个数的两边再递归上述方法。 * 此处采用最简单的快速排序,选择数组最左边的数为基准数。 * @param a */public static void fastSort(int[] a,int left,int right){if(left>=right){//此时整理已经完成了return ;}int l = left;int r = right;int baseNum = a[left];/** * 将所有比基准大的数放在一边,比基准小的数放到另一边,<span style="color:#ff0000;">与基准数相等放在2边都可以,但是不能不放或者2边都放</span>。 * 当不满足条件时,该基准数已经找到自己的位置,也就是左边全是小于等于自己的数,右边全是大于自己的数。 * 此时是 按升序排序 */while(l<r){<span style="color:#ff0000;">//将小于基准数的放在左边</span>while(l<r&& a[r] >= baseNum){//从后往前找,直到找到小于基准数的下标。r--;}a[l] = a[r];<span style="color:#ff0000;">//将大于或等于基准的数字放到右边</span>while(l<r&&a[l] < baseNum ){//从前往后找,直到找到大于或等于基准数的下标。l++;}a[r] = a[l];}a[l] = baseNum;//一轮结束,将基准数放到正确的位置fastSort(a, left, l-1);//基准数左边继续fastSort(a, l+1, right);//基准数右边继续}/** * * @param length 随机数组长度 * @param bits 数组中数字的位数 * @return */public static int[] randomArray(int length,int bits){int[] arr = new int[length];for(int i=0;i<length;i++){arr[i] = (int) (Math.random()*Math.pow(10, bits));}return arr;} }
快速排序中,红色字体要注意,一定要考虑和基准数相等情况,如果2边都不放和基准数相等的数或者2边都放,那么如果数组中有重复的数字将一直死循环。
结果截图: 0 0
- JAVA最常用的排序_冒泡排序、选择排序、快速排序
- 常用的排序算法:插入排序,希尔排序,冒泡排序,选择排序,快速排序,归并排序
- java常用的几种排序(冒泡排序 选择 插入排序 /快速排序)
- Java 排序 快速排序 冒泡排序 选择排序 插入排序
- 冒泡排序,选择排序,快速排序的Java实现
- 常用的选择排序.Shell排序.快速排序.冒泡排序.插入排序的算法
- 【排序】快速排序 冒泡排序 选择排序
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 介绍4个常用的排序法。冒泡排序、插入排序、快速排序、选择排序法
- 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序
- JAVA中最常用的排序方法:冒泡排序和选择排序
- java实现冒泡排序,插入排序,选择排序,快速排序
- Java 冒泡排序、选择排序、快速排序、归并排序
- Java排序法(冒泡排序、选择排序、快速排序)
- 常用的排序 冒泡 ,选择,插入,快速
- java写的排序(冒泡排序,插入排序,选择排序,快速排序)
- java几种基本的排序方法,快速排序,冒泡排序,选择排序,插入排序
- 选择排序_冒泡排序
- Gym 100507G The Debut Album
- 设计模式之-代理模式
- CentOS 7.2 Mitaka云平台控制节点部署脚本(VLAN+VXLAN+DVR私有网络)
- Effective Java学习笔记: 第57条只针对异常的情况才使用异常
- LeetCode #187: Repeated DNA Sequences
- JAVA最常用的排序_冒泡排序、选择排序、快速排序
- Hadoop压缩方式
- Gridview的简单应用
- substring的一个易错点
- 使用Visual Studio cl编译的步骤
- Socket、Tcp、Udp、Http 知识点学习
- 2016 acm香港网络赛 F.Crazy Driver
- Android Studio中导入eclipse中的library库报错后的解决方案
- SM的工作就是在PO与团队之间的架桥