package com.suanfa;
import java.util.Arrays;
public class 冒泡 {
public static void main(String[] args){
int arr[] =new int[10];
for(int i=0;i<10;i++){
arr[i]=(int)(i*10*Math.random());
}
System.out.println(arr.toString());
System.out.println(Arrays.toString(arr));
for(int j=0;j<arr.length-1;j++){
for(int k=0;k<arr.length-j-1;k++){
if(arr[k]<arr[k+1]){
int temp=0;
temp=arr[k];
arr[k]=arr[k+1];
arr[k+1]=temp;
}
}
}
System.out.println(arr.toString());
System.out.println(Arrays.toString(arr));
}
}
[I@6d06d69c
[0, 1, 17, 11, 21, 47, 56, 41, 11, 89]
[I@6d06d69c
[89, 56, 47, 41, 21, 17, 11, 11, 1, 0]
关于临界值:i从0开始,i<a.length-1,因为有10个数,到最后最大的数已经在最下面了,所以最后一次可以忽略不用比较。
复杂度:
10个数的话,第一次9次比较,第二次8次,最后1次,比较总数9+8+......+1.
如果N个数据,那比较就是总数M=N*(N-1)/2,交换次数大概为比较的一半,N*(N-1)/4,最坏的时候和比较次数一样。
去掉常数,时间复杂度O(N^2)。