冒泡排序
你好!最近在试着用java来探索一些算法的去重,倒序,最大值,最小值.那么把一列数组排布一下。
int [] arr = {156,155,153,142,140,138,130,128,124,104};
public class day1 {
public static void main(String[] args) {
int [] arr = {156,155,153,142,140,138,130,128,124,104};
System.out.println("the arr length is"+arr.length);
for (int i = 0; i <arr.length ; i++) {
for (int j = 0; j <arr.length-1; j++) {
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
for (int j = 0; j <arr.length; j++) {
System.out.print(arr[j]+" ;");
}
System.out.println("the"+(i+1)+"time arr is");
}
System.out.print(" ");
for (int i = 0; i <arr.length ; i++) {
System.out.print(arr[i]+" ;");
}
}
}
结果如下
// the arr length is 10
// 155 ;153 ;142 ;140 ;138 ;130 ;128 ;124 ;104 ;156 ;the1time arr is
// 153 ;142 ;140 ;138 ;130 ;128 ;124 ;104 ;155 ;156 ;the2time arr is
// 142 ;140 ;138 ;130 ;128 ;124 ;104 ;153 ;155 ;156 ;the3time arr is
// 140 ;138 ;130 ;128 ;124 ;104 ;142 ;153 ;155 ;156 ;the4time arr is
// 138 ;130 ;128 ;124 ;104 ;140 ;142 ;153 ;155 ;156 ;the5time arr is
// 130 ;128 ;124 ;104 ;138 ;140 ;142 ;153 ;155 ;156 ;the6time arr is
// 128 ;124 ;104 ;130 ;138 ;140 ;142 ;153 ;155 ;156 ;the7time arr is
// 124 ;104 ;128 ;130 ;138 ;140 ;142 ;153 ;155 ;156 ;the8time arr is
// 104 ;124 ;128 ;130 ;138 ;140 ;142 ;153 ;155 ;156 ;the9time arr is
// 104 ;124 ;128 ;130 ;138 ;140 ;142 ;153 ;155 ;156 ;the10time arr is
// 104 ;124 ;128 ;130 ;138 ;140 ;142 ;153 ;155 ;156 ;
关于计算的复杂度,计算在外循环中需要执行 i 次,即为arr.length长度值.
在内循环中执行为 j 次,即为arr.length-1长度值.
总共需要执行 i*j
观察循环结果可以知道,每次 j 可以取得大值,并且排序到末位.
可以简化第一次执行 arr.length - 1
第二次执行arr.length - 2
…
第i 次执行arr.length - i -1;
优化内循环
public class day1 {
public static void main(String[] args) {
int [] arr = {156,155,153,142,140,138,130,128,124,104};
System.out.println("the arr length is"+arr.length);
for (int i = 0; i <arr.length ; i++) {
for (int j = 0; j <arr.length-1-i; j++) {
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
for (int j = 0; j <arr.length; j++) {
System.out.print(arr[j]+" ;");
}
System.out.println("the"+(i+1)+"time arr is");
}
System.out.print(" ");
for (int i = 0; i <arr.length ; i++) {
System.out.print(arr[i]+" ;");
}
}
}
for (int i = 0; i <arr.length ; i++) {
for (int j = 0; j <arr.length-1-i; j++) {
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
结果不变,但是复杂度减少了,优化了程序的运算方式.
完毕~