冒泡排序:相邻元素,两两进行比较
1.1 此代码虽少,但是其运行时所需的内部循环次数较多
import java.util.Arrays;
public class p {
public static void main(String[] args) {
//数组排序 - 冒泡排序
//从小到大排序
int[] arr = {9,5,-7,3,12};
System.out.println("排序前的数组:" + Arrays.toString(arr));
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;
}
}
}
System.out.println("数组从小到大排序:" + Arrays.toString(arr));
}
}
1.2 代码虽然复杂,但是其运行时所需的内部循环次数较少
import java.util.Arrays;
public class MyTest14 {
public static void main(String[] args) {
//数组排序 - 冒泡排序:相邻元素,两两进行比较
/*
如果数组本身就是排好序的,如何减少比较次数
|
如何证明数组是排好序的?
|
如果没有交换数组的元素,就证明数组是排号顺序的 - 没有进入if
|
如何证明没有进入if
*/
// 从小到大排序
int[] arr = {9,5,-7,3,12};
System.out.println("排序前的数组:" + Arrays.toString(arr));
for(int i = 0; i < arr.length - 1; i++) {// i 表示是第几轮比较
//System.out.println("---------------------------");
boolean flag = true;// true 数组已经假设排好序了
for(int j = 0; j < arr.length - 1 - i; j++) {// j 表示数组内所选元素的下标
//System.out.println("*****************");
if(arr[j] > arr[j+1]) {//通过元素比较以此来交换数值
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = false;// false 表示数组是没有排好序
}
}
if(flag == true){//数组有序,退出循环
break;
}
}
System.out.println("数组从小到大排序:" + Arrays.toString(arr));
}
}