JAVA实现冒泡排序

               北京时间2022年03月14日,晚23:48分。天气晴朗,多云,温度22-29°,比昨天凉快一些。今天来实现JAVA冒泡排序,冒泡排序的思想是逐渐把最大的数往后排,然后依次对该最大的数前的数继续找出剩余最大的数往后排...这样排到最后就完成了排序。整个过程和选择排序有异曲同工之妙,选择排序中往往是每次都选择最小的数往前排,它则是每次选择最大的数往后排...

(一)、代码实现:

public static void main(String[] args){
int[] array = {8,10,9,1,2};
int[] arrays = {8,-1,10,-2,9,1,2};
sortPlus(arrays);
print(arrays);
}
/**
* 思路:冒泡排序是每次把最大的值排到最后,然后依次从[0-maxIndex)继续排序
* 有点像反向选择排序,选择排序是每次选择最小的排前面,而冒泡排序却是每
* 次选择最大的数依次丢后面。这样就完成了排序
*/
public static void sort(int[] array){
int size = array.length-1;
// array = {8,10,9,1,2}为例
// ①8 10 9 1 2,8 9 10 1 2,8 9 1 10 2,8 9 1 2 10
// ②8 9 1 2,8 1 9 2,8 1 2 9
// ③1 8 2,1 2 8
// ④1 2 8 9 10
for (int i=0;i<=size;i++){
for (int j=0;j<size-i;j++){
if (array[j]>array[j+1]){
int temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
}
}
}
}

/**
* 改进版冒泡:在第一层循环定义标志位
*/
public static void sortPlus(int[] array){
int size = array.length-1;
// array = {8,10,9,1,2}为例
// ①8 10 9 1 2,8 9 10 1 2,8 9 1 10 2,8 9 1 2 10
// ②8 9 1 2,8 1 9 2,8 1 2 9
// ③1 8 2,1 2 8
// ④1 2 8 9 10
boolean flag = false;
for (int i=0;i<=size;i++){
for (int j=0;j<size-i;j++){
if (array[j]>array[j+1]){
int temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
// 如果一直遇到左边数大于右边的时候,说明一直需要第二层循环
flag = true;
}else {
// 当 8 <= 10时,第二轮循环可根据条件break
// 既当前相邻两个数,左边小于等于右边时,可直接break,既左边的一定不是最大,而右边的不一定不是最大,所以直接break到下一轮去比较
if (!flag){
flag = true;
break;
}else {
// 此情况应该是8 9 10 11时,第一次8 < 9 且 flag = false 所以break到第一层第二次,第二次仍然9 < 10 但此时flag = true
// 不break,j++继续判断,此时10 < 11 因为flag = false了,所以跳出第二层循环
flag = false;
}
}
}
}
}

public static void print(int[] array,String ...str){
System.out.println(str);
for (int i:array){
System.out.print(i+" ");
}
System.out.println();
}
posted @ 2022-03-15 00:10  卓不庭  阅读(214)  评论(0编辑  收藏  举报