package self.training; import java.util.Arrays; public class BubbleSort { public static void main(String[] args) { /* * 冒泡排序的实现 * 原理:紧挨的两个数两两相比。例0和1;1和2;2和3…… * 用来观察运行效率、运行状态的代码可不写 * 此代码为升序 * 顺带练习同一个类当中,方法的调用 */ int[] arr = array(10); //通过调用array方法,创建一个名为arr的数组,数组长度由输入的数决定 System.out.println(Arrays.toString(arr)); //输出观察原始数组 int cycle = 0; //声明一个名为cycle的整型变量,用来统计循环次数,观察排序效率 long startTime = System.currentTimeMillis(); //记录排序开始时的时间,便于观察排序效率 //每次外循环一次就会决定一个数,因此最后一次循环时只剩下一个数,没有排序的必要,所以外循环次数可以减1 for (int i = 0; i < arr.length - 1; i++) { //由于每结束一次外循环,最大的就会移动到最右边可以不用再判断,所以内循环能随着外循环的增加而减少 //且最右边的数没有右边的数能和它相比,所以要减1 for (int j = 0; j < arr.length - 1 - i; j++) { if(arr[j] > arr[j + 1]){ //if语句判断前后数的大小,如果前者大就调换位置,使最大值排到最右 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } cycle++; //每循环一次自增1 } } long endTime = System.currentTimeMillis(); //记录排序结束时的时间,用来观察排序效率 System.out.println(Arrays.toString(arr)); //输出观察排序后的数组 System.out.println("总循环次数:"+cycle); System.out.println("耗时"+(endTime-startTime)+"毫秒"); } /* * 制作一个有参且有返回值的方法,名叫array * 此方法用来生成int数组,数组长度由用户决定,数组元素为[0~99]之间的随机数 */ public static int[] array(int length){ int[] array = new int[length]; for (int i = 0; i < array.length; i++) { array[i] = (int)(Math.random()*100); //生成[0~99]之间的随机数 } return array; //返回数组array的值 } }
冒泡排序的实现,及其效率具象化
于 2022-04-12 19:32:44 首次发布