冒泡排序
冒泡排序思想:通过对待排序序列从前往后依次比较元素值,如果发现逆序则交换,是元素大的移动到后面或前面,就像水中气泡一样。
代码实例
下面展示一些 冒泡排序代码片
。
package com.haina.java11;import java.util.Arrays;public class SortTest {public static void main(String[] args) {int arr[] = {1, 22, 7, 3, 4, -5, -8};System.out.println("排序前的序列:");System.out.println(Arrays.toString(arr));System.out.println("排序后的序列:");SortTest.bubbleSort(arr);}public static void bubbleSort(int[] a) {//设置一个变量int temp = 0;//控制循环的行数for (int i = 0; i < a.length - 1; i++) {//控制比较的次数for (int j = 0; j < a.length - 1 - i; j++) {if (a[j] > a[j + 1]) {temp = a[j];a[j] = a[j + 1];a[j + 1] = temp;}}}System.out.println(Arrays.toString(a));}
}
程序结果:
优化:
因为在排序过程中,元素不断接近自己的位置,如果一趟下来没有进行元素交换,则说明是有序序列,因此要在排序过程中加一个标志flag,来判断元素是否进行过交换,从而减少没必要的比较。
下面展示一些 冒泡排序优化后代码片
。
package com.haina.java11;import java.util.Arrays;public class SortTest {public static void main(String[] args) {int arr[] = {1, 22, 7, 3, 4, -5, -8};System.out.println("排序前的序列:");System.out.println(Arrays.toString(arr));System.out.println("排序后的序列:");SortTest.bubbleSort(arr);}public static void bubbleSort(int[] a) {//设置一个变量int temp = 0;boolean flag=false;//控制循环的行数for (int i = 0; i < a.length - 1; i++) {//每次遍历前先将flag初始化为true;flag=true;//控制比较的次数for (int j = 0; j < a.length - 1 - i; j++) {if (a[j] > a[j + 1]) {temp = a[j];a[j] = a[j + 1];a[j + 1] = temp;// 当在本次遍历之中存在元素交换时,将flag置为false。flag = false;}}//当本次遍历结束后,如果flag还是初始的重置状态,则说明本次遍历没有元素交换。// 即整个数组的顺序已排列好。此时直接跳出循环即可。if (flag){break;}}System.out.println(Arrays.toString(a));}
}