冒泡排序算法
思想:
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
举例:
(1)要排序数组:[10,1,35,61,89,36,55]
(2)第一趟排序:
第一次排序:10和1比较,10大于1,交换位置 [1,10,35,61,89,36,55]
第二趟排序:10和35比较,10小于35,不交换位置 [1,10,35,61,89,36,55]
第三趟排序:35和61比较,35小于61,不交换位置 [1,10,35,61,89,36,55]
第四趟排序:61和89比较,61小于89,不交换位置 [1,10,35,61,89,36,55]
第五趟排序:89和36比较,89大于36,交换位置 [1,10,35,61,36,89,55]
第六趟排序:89和55比较,89大于55,交换位置 [1,10,35,61,36,55,89]
第一趟总共进行了六次比较,排序结果:[1,10,35,61,36,55,89]
(3)第二趟排序:
第一次排序:1和10比较,1小于10,不交换位置 [1,10,35,61,36,55,89]
第二次排序:10和35比较,10小于35,不交换位置 [1,10,35,61,36,55,89]
第三次排序:35和61比较,35小于61,不交换位置 [1,10,35,61,36,55,89]
第四次排序:61和36比较,61大于36,交换位置 [1,10,35,36,61,55,89]
第五次排序:61和55比较,61大于55,交换位置 [1,10,35,36,55,61,89]
第二趟总共进行了5次比较,排序结果:[1,10,35,36,55,61,89]
(4)第三趟排序:
1和10比较,1小于10,不交换位置 [1,10,35,36,55,61,89]
第二次排序:10和35比较,10小于35,不交换位置 [ 1,10,35,36,55,61,89]
第三次排序:35和36比较,35小于36,不交换位置 [1,10,35,36,55,61,89]
第四次排序:36和61比较,36小于61,不交换位置 [1,10,35,36,55,61,89]
第三趟总共进行了4次比较,排序结果:[1,10,35,36,55,61,89]
到目前位置已经为有序的情形了。
平均时间复杂度:O(n²)
最好情况:O(n)
最坏情况:O(n²)
空间复杂度:O(1)
public class BubbleSort {
public static void main(String[] args) {
int temp ; //临时变量,存储数据
int[] a = {2,4,1,7,9,6,3};
for (int i = a.length-1 ; i > 0 ; i-- ){
for (int j = 0 ; j < a.length-1 ; j++){
if (a[j] > a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for ( int i = 0; i < a.length ; i++){
System.out.print(a[i]+ " ");
}
}
}