冒泡排序工作原理:它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
时间复杂度:O(n²)
空间复杂度:O(1)
稳定性:稳定
算法优化版:
import java.util.Arrays;
import java.util.Random;
/**
* @hla
* @Date 2019/7/22 23:41
**/
public class BubbleSort {
public static void main(String[] args) {
Random random = new Random();
int arr[] = new int[10000];
//产生1万个随机数
for(int i=0;i<arr.length;i++){
arr[i] = random.nextInt(10000);
}
//复制一份以验证算法正确与否
int arrCopy[] = new int[10000];
System.arraycopy(arr,0,arrCopy,0,arr.length);
int temp;
//算法开始
for(int i = 0;i<arr.length-1;i++){
boolean flag = true;//假设有序
for (int j = 0; j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = false;//假设失败
}
}
if(flag){
break;
}
}
//jdk自带的方法排序
Arrays.sort(arrCopy);
boolean same = true;
//验证算法正确与否
for(int i=0;i<arr.length;i++){
if(arr[i]!=arrCopy[i]) {
same = false;
System.out.println(arr[i] + " " + arrCopy[i]);
}
}
System.out.println(same==true?"算法正确":"算法错误");
}
}
结果:
算法正确