冒泡排序:
import java.util.Arrays;
/**
* 冒泡排序
*
*/
public class Test2 {
public static void main(String[] args) {
int[] a = {1,2,4,3,9,5,2,20,100,99,0,3,2,1};
for (int i = 0; i < a.length; i++) {
//如果不多减1会出现数组越界异常,因为下面使用了j+1
for (int j = 0; j < (a.length - i -1); j++) {
if (a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
//使用Arrays工具类打印排序后的数组
System.out.println(Arrays.toString(a));
//打印结果:[0, 1, 1, 2, 2, 2, 3, 3, 4, 5, 9, 20, 99, 100]
}
}
优化冒泡排序:
思想:如果有一趟排序没有交换位置,那么说明排序已经完成,接下来的循环就是浪费,所以跳出循环。
优化前:遍历数组的次数为10
import java.util.Arrays;
/**
* 优化冒泡排序
*
* 思想:如果有一趟排序没有交换位置,那么说明排序已经完成,接下来的循环就是浪费,所以跳出循环。
*
*/
public class Test {
public static void main(String[] args) {
//int[] a = {1,2,4,3,9,5,2,20,100,99,0,3,2,1};
int[] a = {100,1,2,3,4,5,6,7,8,9};
//boolean flag = false;
int count = 0;//记录遍历数组的次数
for (int i = 0; i < a.length; i++) {
//flag = false;
//如果不多减1会出现数组越界异常,因为下面使用了j+1
for (int j = 0; j < (a.length - i -1); j++) {
if (a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
//flag = true;
}
}
// if (flag==false){
// break;
// }
count++;
}
System.out.println("遍历数组的次数:"+count);
//使用Arrays工具类打印排序后的数组
System.out.println(Arrays.toString(a));
//System.out.println(flag);
//打印结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 100]
}
}
优化后:遍历数组的次数为1
import java.util.Arrays;
/**
* 优化冒泡排序
*
* 思想:如果有一趟排序没有交换位置,那么说明排序已经完成,接下来的循环就是浪费,所以跳出循环。
*
*/
public class Test {
public static void main(String[] args) {
//int[] a = {1,2,4,3,9,5,2,20,100,99,0,3,2,1};
int[] a = {100,1,2,3,4,5,6,7,8,9};
boolean flag;
int count = 0;//记录遍历数组的次数
for (int i = 0; i < a.length; i++) {
flag = false;
//如果不多减1会出现数组越界异常,因为下面使用了j+1
for (int j = 0; j < (a.length - i -1); j++) {
if (a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
flag = true;
}
}
if (flag==false){
break;
}
count++;
}
System.out.println("遍历数组的次数:"+count);
//使用Arrays工具类打印排序后的数组
System.out.println(Arrays.toString(a));
//System.out.println(flag);
//打印结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 100]
}
}