冒泡排序
import java.util.Arrays;
/**
* @author lizz
* @ClassName BubbleSort.java
* @Description 冒泡排序
* @createTime 2022年04月21日 10:39:00
*/
public class BubbleSort {
/**
* 冒泡排序第一版
* @param arr 要排序的数组
* @return
*/
public int[] descSortV1(int[] arr){
int temp = 0;
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
if(arr[i] < arr[j]){
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
return arr;
}
/**
* 冒泡排序第二版
* 对 “存在循环未结束,但排序已完成的情况”进行优化
* 利用boolean变量作为标记:
* 如果本轮排序中,元素有交换,则说明元素无序;
* 如果元素没有交换,则说明数列已经有序,直接跳出大循环。
* @param arr 要排序的数组
* @return
*/
public int[] descSortV2(int[] arr){
int temp = 0;
boolean isSorted = true;
for (int i = 0; i < arr.length-1; i++) {
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;
isSorted = false;
}
}
if(isSorted){
break;
}
}
return arr;
}
/**
* 冒泡排序第三版
* 对有序区进行边界区分,有序的不需要再进行排序
* 用sortBorder 记录无序数列的边界
* @param arr 要排序的数组
* @return
*/
public int[] descSortV3(int[] arr){
//记录最后一次交换的位置
int lastExchangeIndex = 0;
//无需数列的边界,每次比较只需要必到这里为止
int sortBorder = arr.length-1;
//临时变量
int temp = 0;
// 有序标记
boolean isSorted = true;
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < sortBorder; j++) {
if(arr[j] < arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
//有元素交换,所以不是有序的
isSorted = false;
//更新最后一次元素交换的位置
lastExchangeIndex = j;
}
}
sortBorder = lastExchangeIndex;
if(isSorted){
break;
}
}
return arr;
}
public static void main(String[] args) {
BubbleSort bubbleSort = new BubbleSort();
System.out.println(Arrays.toString(bubbleSort.descSortV1(new int[]{10,3,5,2,7,1})) );
System.out.println(Arrays.toString(bubbleSort.descSortV1(new int[]{5,8,6,3,9,2,1,7})));
System.out.println(Arrays.toString(bubbleSort.descSortV2(new int[]{10,3,5,2,7,1})) );
System.out.println(Arrays.toString(bubbleSort.descSortV2(new int[]{5,8,6,3,9,2,1,7})));
System.out.println(Arrays.toString(bubbleSort.descSortV3(new int[]{10,3,5,2,7,1})) );
System.out.println(Arrays.toString(bubbleSort.descSortV3(new int[]{5,8,6,3,9,2,1,7})));
}
}