冒泡排序思想
默认采用数组作为数据存储结构
如果是升序的话,就是先两两比较得到最大的数并放在末尾,然后从头循环比较得到第二大的数放到倒数第二个位置,依次循环执行,直到只剩下第一个数和第二个数进行依次比较后,便得到有序数组。
算法复杂度
如果数组中有N个数据项,那么第一次排序找到最大的数需要比较N-1次,第二次找到第二大的数需要比较N-2次,依次类推,得到总共需要比较:(N-1)+(N-2)+...+1=N*(N-1)/2。
而对于是否需要交换来说,在考虑随机分布的情况下,大概只需要交换比较次数的一半次,也就是N*(N-1)/4。
由于常数不算在大O表示法中,因此该算法的时间复杂度为O(N^2)。
一般来说,出现一个循环嵌套在另一个循环的情况,基本上复杂度都是O(N^2)。
java实现
import java.util.ArrayList;
public class BubbleSort {
public static void main(String[] args) {
int[] a = {5,4,3,2,1,4,3,5,7,5,6,8,9};
a = arraySort(a);
ArrayList<String> sortnum = new ArrayList<>();
for(int num:a){
sortnum.add(num+"");
}
System.out.println(sortnum);
}
//升序
public static int[] arraySort(int[] arr){
for(int i=arr.length-1;i>0;i--){
for(int j=0;j<i;j++){
if(arr[j]>arr[j+1]){
int temp;
temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
}