package com.ysh.demo;
import org.junit.Test;
import java.util.Arrays;
/*
冒泡排序:
一个数组冒泡,如果左边数字大于右边数字,那么交换位置。
数组:
arr = {1,2,3},
分析:
第一次:确定一个最大值,排在数组的最后一位,需要比较的次数为arr,length-1-i,i为外循环的计数
第二次:确认数组倒数第二位,需要比较的次数为arr,length-1-i
...
总结:
只需要内外两个循环即可。
for (int i = 0; i<arr.length-1;i++){
for (int j = 0;j<arr.length-i-1;j++){}
}
*/
public class SortSet {
public static void main(String[] args) {
int[] arr = {0,2,3,1,2,4,5,0,8};
//定义临时变量,用于交换
int temp = 0;
//外循环,次数为数组长度-1
for (int i=0; i<arr.length-1;i++){
//内循环组长度-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;
}
}
}
}
/*
冒泡算法优化
引入计数器
*/
@Test
public void bubbleAdvance(){
int[] arr = {0,1,2,3,5,4};
//定义临时变量,用于交换
int temp=0;
//定义标志位
boolean flag;
//外循环,次数为数组长度-1
for (int i = 0; i<arr.length-1;i++){
flag=true;
//内循环组长度-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;
flag=false;
}
}
if (flag){
System.out.println("第"+i+"次循环,排序结束");
System.out.println(Arrays.toString(arr));
return;
}
}
}
}