冒泡排序(未优化)
import java.util.Arrays;
//冒泡排序
public class BubbleDemo {
public static void main(String[] args) {
int[] arr = {12,42,36,9,16,1,23};
for (int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]<arr[j+1]){
int temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
冒泡排序优化
package day04; import java.util.Arrays; //冒泡排序 public class New { public static void main(String[] args) { int[] arr = {8,4,2,1,23,344,12}; //int[] arr = {4,6,3,7,8,9,10}; //未优化 //sort1(arr); //优化1 针对比较轮数进行优化 sort2(arr); //优化2 针对比较次数进行优化 sort3(arr); } //未优化 冒泡排序 public static void sort1(int[] arr) { for (int i = 0; i <arr.length-1; i++) { //i 轮数 System.out.println("目前是第"+(i+1)+"轮比较"); for (int j = 0; j <arr.length-1-i ; j++) { //j 次数 System.out.println("第"+(i+1)+"轮,第"+(j+1)+"次比较"); //交换的条件 if(arr[j] > arr[j+1]){ int temp = arr[j+1]; arr[j+1] = arr[j]; arr[j] = temp; } } //输出当前轮次比较的结果 System.out.println(Arrays.toString(arr)); } //输出 System.out.println("排序后:"+Arrays.toString(arr)); } //优化1 针对比较轮数进行优化 冒泡排序 public static void sort2(int[] arr) { for (int i = 0; i <arr.length-1; i++) { //i 轮数 System.out.println("目前是第"+(i+1)+"轮比较"); //标志位 boolean flag = true; for (int j = 0; j <arr.length-1-i ; j++) { //j 次数 System.out.println("第"+(i+1)+"轮,第"+(j+1)+"次比较"); //交换的条件 if(arr[j] > arr[j+1]){ int temp = arr[j+1]; arr[j+1] = arr[j]; arr[j] = temp; flag = false; } } //输出当前轮次比较的结果 System.out.println(Arrays.toString(arr)); //当不再发生交换时,则结束比较 if(flag){ break; } } //输出 System.out.println("排序后:"+Arrays.toString(arr)); } //优化2 针对比较次数进行优化 冒泡排序 public static void sort3(int[] arr) { //定义一个作为比较的边界 int position = arr.length-1; for (int i = 0; i <arr.length-1; i++) { //i 轮数 System.out.println("目前是第"+(i+1)+"轮比较"); //标志位 boolean flag = true; //记录最后交换位置的值 int limit = 0; for (int j = 0; j <position ; j++) { //j 次数 System.out.println("第"+(i+1)+"轮,第"+(j+1)+"次比较"); //交换的条件 if(arr[j] > arr[j+1]){ int temp = arr[j+1]; arr[j+1] = arr[j]; arr[j] = temp; flag = false; limit = j; } } position = limit; //输出当前轮次比较的结果 System.out.println(Arrays.toString(arr)); //当不再发生交换时,则结束比较 if(flag){ break; } } //输出 System.out.println("排序后:"+Arrays.toString(arr)); } }