基本思想
在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
算法的实现
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| package com.zyg.sort;
public class BubbleSortAlgorithm { public static void bubbleSort(int a[], int len) { for (int i = 0; i < len; i++) { boolean flag = false; <!--more--> for (int j = len - 1; j > i; j--) { if (a[j] < a[j - 1]) { swap(a, j, j - 1); flag = true; } } if (!flag) break; } } public static void swap(int a[], int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } public static void printArray(int a[]) { for (int i = 0; i < a.length; i++) { System.out.println(a[i]); } } public static void main(String[] args) { int a[] = { 4, 3, 6, 7, 33, 15, 90, 65, 777, 5550 }; bubbleSort(a, a.length); printArray(a); } }
|
效率
时间复杂度
平均情况:O(n2)
最好情况:O(n)
最坏情况:O(n2)
空间复杂度
O(1)
稳定性
稳定