6.7 冒泡排序
-
冒泡排序无疑是最为出名的排序算法之一,总共有八大排序!
-
冒泡排序的代码还是相当简单的,两层循环,外层冒泡轮数,里层依次比较,江湖中人人尽皆知
-
我们看到嵌套循环,英爱立马就可以得出这个算法的时间复杂度为O( n 2 n^2 n2)
package com.baidu.www.array;import java.util.Arrays;public class ArrayDemo07 {public static void main(String[] args) {int[] a = {1,123,435,231,245,64,23,65,1234,6421,30,387};System.out.println(Arrays.toString(a));sort(a);System.out.println(Arrays.toString(a));/** int[] sort =sort(a);* System.out.println(Arrays.toString(a));* */}//冒泡排序//1、比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置//2、每一次比较,都会产生出一个最大,或者最小的数字//3、下一轮则可以少一次排序//4、依次循环,直到结束!public static int[] sort(int[] array){//定义一个临时变量用于交换int temp = 0;//外层循环,判断我们这个要走多少次for (int i = 0; i < array.length-1; i++) {//内层循环,比较两个数,如果第一个数比第二个数大则交换位置for (int j = 0; j < array.length-1-i; j++) {if(array[j+1]>array[j]){temp = array[j];array[j]=array[j+1];array[j+1]=temp;}}}return array;} } /* * [1, 123, 435, 231, 245, 64, 23, 65, 1234, 6421, 30, 387] [6421, 1234, 435, 387, 245, 231, 123, 65, 64, 30, 23, 1]Process finished with exit code 0*/
-
在这里我们还要思考一个问题,如果输入的数组本身就已经排好序了,但是排序算法还是要重新的进行比较,如此以来就造成了算法的浪费,为了解决这个问题,我们可以尝试引入一个判断来减少程序运行,可以在外层定义一个变量这是一个优化的思路。
package com.baidu.www.array;import java.util.Arrays;public class ArrayDemo07 {public static void main(String[] args) {int[] a = {1,123,435,231,245,64,23,65,1234,6421,30,387};System.out.println(Arrays.toString(a));sort(a);System.out.println(Arrays.toString(a));/** int[] sort =sort(a);* System.out.println(Arrays.toString(a));* */}//冒泡排序//1、比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置//2、每一次比较,都会产生出一个最大,或者最小的数字//3、下一轮则可以少一次排序//4、依次循环,直到结束!public static int[] sort(int[] array){//定义一个临时变量用于交换int temp = 0;//外层循环,判断我们这个要走多少次for (int i = 0; i < array.length-1; i++) {//为了优化代码,外围设置一个变量,用于不用比较时跳出循环,减少没有意义的比较boolean flag = false;//内层循环,比较两个数,如果第一个数比第二个数大则交换位置for (int j = 0; j < array.length-1-i; j++) {if(array[j+1]>array[j]){temp = array[j];array[j]=array[j+1];array[j+1]=temp;flag = true;}}if (flag==false){break;}}return array;} } /* * [1, 123, 435, 231, 245, 64, 23, 65, 1234, 6421, 30, 387] [6421, 1234, 435, 387, 245, 231, 123, 65, 64, 30, 23, 1]Process finished with exit code 0*/