冒泡排序
冒泡排序
图解



第一个数组下标元素与第二个数组元素比较大于则交换 第二个数组元素与第三个数据元素比较大于则交换.....
假如:
数组长度为5 我们需要比较4次 将最大的数值放在数值的最后一个元素上 也就是 n-1
下一次冒泡的时候 因为最后的已经是最大的,前面4个元素相当于形成一个新的数组
进行重复冒泡
Java code
import java.util.Arrays;
//冒泡排序
public class BubbleSort {
//测试
public static void main(String[] args) {
//生成数组
int[] array = DataChecker.generaRandomArray(20,20);
System.out.println(Arrays.toString(array));
//冒泡排序
sort(array);
System.out.println(Arrays.toString(array));
}
/**
*
* @param arr int[]
* 对数组进行冒泡排序
*/
public static void sort(int[] arr){
for (int i = arr.length-1; i > 0 ; i--) {
for (int j = 0; j < i; j++) {
if (arr[j] > arr[j+1] ){
swap(arr,j,j+1);
}
}
}
}
/**
* @param arr int[]
* @param i 需要交换的数组下标
* @param j 同上
*/
public static void swap(int[] arr,int i,int j){
//交换
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}

对数器DataChecker
import java.util.Arrays;
import java.util.Random;
//对数器
public class DataChecker {
/**
* @param size 数组大小
* @return 随机数组
*/
public static int[] generaRandomArray(int size){
return generaRandomArray(size,size);
}
/**
*
* @param size size 数组的大小
* @param randomSize 随机数值的大小
* @return int[]
*/
public static int[] generaRandomArray(int size,int randomSize){
Random random = new Random();
int[] arr = new int[size];
for (int i = 0; i < arr.length; i++) {
arr[i] = random.nextInt(randomSize);
}
return arr;
}
/**
*
* @param arr1 int[]
* @param arr2 int[]
* @return 比较两个数组的值是否相同
*/
public static boolean check(int[] arr1,int[] arr2){
Arrays.sort(arr1);
//选择排序
//SelectedSort.sort(arr2);
//冒泡排序 ,这里可以使用策略模式 就不用每次都改动源代码了
BubbleSort.sort(arr2);
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] != arr2[i]){
return false;
}
}
return true;
}
//测试
public static void main(String[] args) {
//存储正确的次数
int right = 0;
for (int i = 0; i < 10000; i++) {
System.out.println("第"+i+"次随机生成进行比较 ");
int[] arr1 = DataChecker.generaRandomArray(100);
int[] arr2 = Arrays.copyOf(arr1,arr1.length);
if (check(arr1,arr2)) right++;
}
System.out.println("right: " + right);
}
}


浙公网安备 33010602011771号