算法描述
- 遍历数组,比较相邻的两个元素的大小,如果前一个比后一个大就交换位置,如此循环,最后一个位置即最大值
- 重复上述过程,对前 n-1 个元素排序
- 重复直到所有元素都完成排序
操作没问题,但是你难道不觉得,这个比较中间过程中的交换过程很浪费资源吗?为了省去中间的交换过程,我们有了选择排序。
时间复杂度:O(n2)
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
public class BubbleSortDemo { public static void main(String[] args) { int[] sample = new Random().ints(0, 100).limit(10).toArray(); System.out.println("Origin: " + Arrays.toString(sample)); bubbleSort(sample); System.out.println("After: " + Arrays.toString(sample)); }
private static void bubbleSort(int[] sample) { for (int i = sample.length - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if (sample[j] > sample[j + 1]) { swap(sample, j, j + 1); } } } }
private static void swap(int[] arr, int pos1, int pos2) { int tmp = arr[pos1]; arr[pos1] = arr[pos2]; arr[pos2] = tmp; } }
|