public static void main(String[] args) {
int[] array = {1,5,4,3};
for(int i=0;i<array.length-1;i++){ //需要多少躺
for(int j = 0;j<array.length - i-1;j++){ //每趟许需要交换的次数
if(array[j] > array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
for(int m = 0;m<array.length;m++){
System.out.println(array[m]);
}
}
时间复杂度
若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数
和记录移动次数
均达到最小值:
,
。
所以,冒泡排序最好的时间复杂度为
。
若初始文件是反序的,需要进行
趟排序。每趟排序要进行
次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:
冒泡排序的最坏时间复杂度为
。
综上,因此冒泡排序总的平均时间复杂度为
优化
public static void main(String[] args) {
int[] array = {1,5,4,3};
for(int i=0;i<array.length-1;i++){ //需要多少躺
int flag = 0;
for(int j = 0;j<array.length - i-1;j++){ //每趟许需要交换的次数
if(array[j] > array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
flag = -1;
}
}
if(flag == 0){ //如果发现此躺没有发生交换说明此排序已经排好
break;
}
}
for(int m = 0;m<array.length;m++){
System.out.println(array[m]);
}
}