冒泡排序三种方法
- 冒泡排序基础用法
-
import java.util.Arrays; public class BubbleSort { public static void main(String[] args) { int[] array = new int[] {5,8,6,3,9,2,1,7}; sort(array); System.out.println(Arrays.toString(array)); } public static void sort(int array[]){ for (int i = 0; i < array.length-1; i++) { for (int j = 0; j < array.length - i - 1; j++) { int tmp=0; if (array[j]>array[j+1]){ tmp=array[j]; array[j]=array[j+1]; array[j+1]=tmp; } } } } }
-
- 冒泡排序优化第二版
- 与第一版代码相比,第二版代码做了小小的改动,利用一个Boolean作为标记。如果在本轮排序中,元素有交换,则说明数列无序;如果没有元素交换,则说明数列已经有序,然后直接跳出大循环。
-
import java.util.Arrays; public class GoodBubbleSort { public static void main(String[] args) { int[] array = new int[]{5, 8, 6, 3, 9, 2, 1, 7}; sort(array); System.out.println(Arrays.toString(array)); } public static void sort(int array[]) { for (int i = 0; i < array.length - 1; i++) { // 有序标记,每一轮的初始值都是true boolean isSorted = true; for (int j = 0; j < array.length - i - 1; j++) { int tmp=0; if (array[j]>array[j+1]){ tmp=array[j]; array[j]=array[j+1]; array[j+1]=tmp; // 因为有元素交换,所以不是有序的,标记为false isSorted=false; } } if (isSorted){ break; } } } }
- 冒泡排序优化第三版
- 在第三版代码中,sortBorder就是无序数列的边界。在每一轮排序过程中,处于sortBorder之后的元素就不需要再进行比较了,肯定是有序的
-
import java.util.Arrays; public class BestBubbleSort { public static void main(String[] args) { int[] array = new int[]{5, 8, 6, 3, 9, 2, 1, 7}; sort(array); System.out.println(Arrays.toString(array)); } public static void sort(int array[]) { for (int i = 0; i < array.length - 1; i++) { // 有序标记,每一轮的初始值都是true boolean isSorted = true; // 无序数列的边界,每次比较只需要比到这里为止 int sortBorder = array.length - 1; for (int j = 0; j < sortBorder; j++) { int tmp = 0; if (array[j] > array[j + 1]) { tmp = array[j]; array[j] = array[j + 1]; array[j + 1] = tmp; isSorted = false; } } if (isSorted) { break; } } } }
signature:祸兮福所倚,福兮祸所伏