冒泡排序(java可直接跑,算法思想等小儿科不多说直接上代码)

import java.util.Arrays;

/**
*冒泡排序:时间复杂度O(N^2),空间复杂度O(1),稳定的排序
* 每趟确定一个元素的位置,所以需要arr.length趟排序,
*/
public class BubbleSort {
public static void bubbleSort(int[] arr){
if(arr==null||arr.length<2){//如果数组为空,或者数组长度小于2直接返回数组
return ;
}
//需要进行arr.length-1趟的排序
for(int i =arr.length ; i>0 ; i--){
for(int j = 1 ; j < i ; j++){
//如果前面一个元素大于后面一个元素的话,就将大的元素向后沉
if(arr[j-1]>arr[j]){
swap(arr,j-1,j);
}
}
}
}

private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp ;
}
//test
public static int[] generateRandomArray(int size,int value){
//数组的长度是0到100之间
int[] arr= new int[(int)((size+1)*Math.random())];
for(int i = 0 ; i<arr.length;i++){
arr[i] = (int)((value+1)*Math.random()) - (int)(value*Math.random());
}
return arr;
}
//test
public static int[] copyArray(int[] arr){
if(arr==null){
return null;
}
int[] res = new int[arr.length];
for(int i = 0 ; i<arr.length;i++){
res[i] = arr[i];
}
return res ;
}
public static void main(String[] args){
int testTime = 1000000;
int size = 100;
int value = 100 ;
boolean succeed = true;
//测试次数为testTime次
for(int i = 0 ;i<testTime;i++){
//生成一个长度为0到100之间的随机数组
int[] arr1 = generateRandomArray(size,value);
int[] arr2 = copyArray(arr1);
bubbleSort(arr1);
comparator(arr2);
if(!isEqual(arr1,arr2)){
succeed=false;
break;
}
}
System.out.println(succeed?"Nice!":"Fucking fucked!");
//最后再做一个检验
int[] arr= generateRandomArray(size,value);
printArray(arr);
bubbleSort(arr);
printArray(arr);
}

private static void printArray(int[] arr) {
for(int i = 0 ; i < arr.length ; i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}

private static boolean isEqual(int[] arr1, int[] arr2) {
if((arr1==null&&arr2!=null)||(arr1!=null&&arr2==null)){
return false;
}
if(arr1==null&&arr2==null){
return true;
}
if(arr1.length!=arr2.length){
return false;
}
for(int i = 0; i<arr1.length;i++){
if(arr1[i]!=arr2[i]){
return false;
}
}
return true;
}

private static void comparator(int[] arr) {
Arrays.sort(arr);
}

}
原文地址:https://www.cnblogs.com/bigdata-stone/p/11029273.html