常用算法Java实现之冒泡排序
冒泡排序是所有排序算法中最基本、最简单的一种。思想就是交换排序,通过比较和交换相邻的数据来达到排序的目的。
具体流程如下:
1、对要排序的数组中的数据,依次比较相邻的两个数据的大小。
2、如果前面的数据大于后面的数据,就把这两个数据进行交换。这样一轮比较和交换过后,就把最小的数据放在数组的最前面;
3、按照上述比较和交换的方法,把剩下的数据再进行相同操作,最后,便可按照从小到大的顺序对数组完成排序。
假如有初始数据:25 11 45 26 12 78。
1、第一轮排序,从数组的头部开始进行比较。首先是 25 和 11 比较,25 大,将数据 11 向前移一位。同理,比较 25 和 45, 后一个即 45 大,位置不动。再比较45 和 26,前一个数大,所以 45 后移一位。第一轮排序后,顺序为:[11, 25, 26, 12, 45, 78]。
2、第二轮排序,从数组的头部开始进行比较。首先是 11 和 25 比较,由于前面的数小,所以位置不动。比较25 和 26 ,由于前面的数小,所以位置不动。第二轮排序后,顺序为:[11, 25, 12, 26, 45, 78]。
3、第三轮排序,从数组的头部开始进行比较。首先是 11 和 25 比较,由于前面的数小,所以位置不动。比较 25 和 12,由于前面的数大,所以位置互换。第三轮排序后,顺序为:[11, 12, 25, 26, 45, 78]。
......
4、最后一轮排序后,顺序为:[11, 12, 25, 26, 45, 78]
java 代码实现为:(https://github.com/xbk417/algorithm)
1 public int[] sort(int[] arr) { 2 int tmp; 3 for(int i = 1; i < arr.length; i++) { 4 // 判断相邻两个数据的大小,并把较大的数往后冒泡 5 for(int j = 0; j < arr.length - 1; j++) { 6 if(arr[j] > arr[j+1]) { 7 tmp = arr[j]; 8 arr[j] = arr[j+1]; 9 arr[j+1] = tmp; 10 } 11 } 12 System.out.println(i + ":" + Arrays.toString(arr)); 13 } 14 return arr; 15 }