JAVA学习笔记39——冒泡排序:简单版+优化版+最终版

来源:互联网 发布:适合打lol的鼠标 知乎 编辑:程序博客网 时间:2024/06/17 17:29

最近在看JAVA教学的视频,觉得老师讲的很好,同时借用源代码还有笔记来撰写本系列博客,记录自己的学习内容,同时也供看到的人学习。

本篇插入一个容器方面排序的小练习,进行三种优化程度不同的冒泡排序,简单版:简单直接;优化版:减少每趟次数;最终版:考虑有序,减少趟数。

在介绍之前先说一下容器排序的概念:

下面看一下实例代码,首先是最简单直接的一个版本:

import java.util.Arrays;public class BubbleSort1 {/** * @param args */public static void main(String[] args) {int[] arr ={9,8,7,6,5};sort(arr);}//第一版本(简单版),很简单,有些已经比较交换过但仍然重复比较交换多次public static void sort(int[] arr){int len =arr.length;for(int j=0;j<len-1;j++){System.out.println("第"+(j+1)+"趟");for(int i=0;i<len-1;i++){System.out.print("第"+(i+1)+"次");if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] =arr[i+1];arr[i+1] =temp;}System.out.println(Arrays.toString(arr));}}}}
然后是优化的第二版:

import java.util.Arrays;public class BubbleSort2 {/** * @param args */public static void main(String[] args) {int[] arr ={9,8,7,6,5};sort(arr);}//第二版本,减少每一趟的次数public static void sort(int[] arr){int len =arr.length;for(int j=0;j<len-1;j++){ //趟数System.out.println("第"+(j+1)+"趟");for(int i=0;i<len-1-j;i++){ //次数(已经沉到底的数就不要管了,所以缩小每一次的交换次数,做到每一趟都少一次交换)System.out.print("第"+(i+1)+"次");if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] =arr[i+1];arr[i+1] =temp;}System.out.println(Arrays.toString(arr));}}}}
最后是优化程度最高的最终版:

import java.util.Arrays;/** * 最终版本:考虑存在顺序 * @author Administrator * */public class BubbleSort {/** * @param args */public static void main(String[] args) {int[] arr =new int[]{9,1,2,3,4};sortFinal(arr);}//第二版本,减少每一趟的次数public static void sortFinal(int[] arr){boolean sorted= true;  //初始假定有序int len =arr.length;for(int j=0;j<len-1;j++){ //趟数sorted =true; //假定有序,每次交换的开始都假定有序,如果存在交换那么本次无序,还得交换for(int i=0;i<len-1-j;i++){ //次数if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] =arr[i+1];arr[i+1] =temp;sorted =false; //假定失败}System.out.println(Arrays.toString(arr));}if(sorted){ //减少趟数break;}}}}




0 0