冒泡排序
冒泡排序,顾名思义,就是像气泡一样往上冒。
升序排序为例,从第一个数字开始,往向他后面的一个数字比较,如果前者大后者小,就交换,否则,不动,指针后移。依次类推
先来第一趟排序
用于示例的原始数据是:[5, 6, 1, 3, 4]
for (int i = 0; i < arr.length - 1; i++) { if (arr[i] > arr[i + 1]){ temp = arr[i]; arr[i] = arr[i + 1]; arr[i+1] = temp; } } System.out.println("第一趟排序后的结果:"); System.out.println(Arrays.toString(arr));
for (int j = 0; j < arr.length - 2; j++) { if(arr[j] > arr[j+1]){ temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } System.out.println("第二趟排序的结果是"); System.out.println(Arrays.toString(arr));
依次类推,每次都能确定一个数,因为是升序,所以每次都能确定一个最大的数排到他该去的位置上,相对的,需要排序的元素个数也会减少
寻找规律可以得到冒泡排序的总方法:
public static int [] Bubblesort(int [] array){ int item; for (int i = 1; i < array.length; i++) { for (int j = 0; j < array.length - i; j++) { if (array[j] > array[j+1]) { item = array[j]; array[j] = array[j + 1]; array[j + 1] = item; } } } return array; }
优化:
那如果直接就给了一个有序的数组呢,咋办,还要一遍一遍的去比的话不是就浪费时间了吗?
因此,提出冒泡排序的优化算法,其实很简单
定义一个flag初始值设为false,放到算法的交换部分里面去,如果进行了交换,就把值设置为true,说明进行过了比较,那就看flag就行了,如果从前往后比较,一个数都没有交换,那么OK,就是有序的数组了已经,直接返回就行了。