八排序之冒泡排序
冒泡排序
冒泡排序 两层循环 外层冒泡轮数,里层依次比较 时间复杂度O(n^2)
import java.util.Arrays;
public class ArrayDemo07 {
public static void main(String[] args){
System.out.println("Hello World !");
//八大排序之 冒泡排序
int[] arrays = {12,89,45,32,6,4,9,45};
int[] arrays1 = {9,8,7,6,5,4,3,2,1};
// int[] x = sort(arrays);
// System.out.println(Arrays.toString(x));
System.out.println(Arrays.toString(sort(arrays)));
System.out.println("--------------------");
System.out.println(Arrays.toString(sort1(arrays)));
System.out.println("********");
System.out.println(Arrays.toString(sort2(arrays1)));
}
//写一个冒泡排序的方法
//不理解为什么这么写的话 ,画图自己走一遍
public static int[] sort(int[] arrays){
int temp = 0;
//外层循环,判断要走多少次
for (int i = 0; i < arrays.length-1; i++) { //这里需要-1 否则下标越界因为数组下标是从0开始的
// 仔细去想(本来长度7,两两比较6次,不减1的话 <7 0-6 比较7次)
//减去1的话,<6 0-5 比较6次才正确
//内层循环 如果第一个数比第二个数大,交换位置 交换位置要借助第三者临时变量
for (int j = 0; j < arrays.length-1-i; j++) { //不理解的话 ,画图自己走一遍
if (arrays[j+1] > arrays[j]){ //从大到小排序
temp = arrays[j+1];
arrays[j+1] = arrays[j];
arrays[j] = temp;
}
}
}
//第一个循环是一共要比较的轮数,第二个循环是数与数之间需要比较的次数
return arrays;
}
//从小到大 冒泡排序
public static int[] sort1(int[] arrays){
int temp1 = 0;
for (int i = 0; i < arrays.length-1; i++) {
for (int j = 0; j < arrays.length-1-i; j++) {
if (arrays[j] > arrays[j+1]){
temp1 = arrays[j];
arrays[j] = arrays[j+1];
arrays[j+1] = temp1;
}
}
}
return arrays;
}
//改进:从大到小的冒泡排序
//适用一开始就是从大到小的数组,就不用排序
public static int[] sort2(int[] arrays){
int temp = 0;
//外层循环,判断要走多少次
for (int i = 0; i < arrays.length-1; i++) {
boolean flag = false;
for (int j = 0; j < arrays.length-1-i; j++) {
if (arrays[j+1] > arrays[j]){ //从大到小排序
temp = arrays[j+1];
arrays[j+1] = arrays[j];
arrays[j] = temp;
flag = true;
}
}
if (flag == false){
break;
}
}
return arrays;
}
}