定义一个静态数组,手动添加数字,利用冒泡排序并遍历排好序后的数组
public class Instance {
public static void main(String[] args){
//定义一个静态数组
int[] arr = {3,43,1,56,5,8,9,21};
//使用冒泡排序
for(int i=0; i<arr.length-1; i++){
for(int j=0; j<arr.length-i-1; j++){
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
//遍历排好序的数组
for(int i=0; i<arr.length; i++){
System.out.print("\t"+ arr[i]);
}
}
}
冒泡排序的优化(通过定义flag判断循环完之前是否已经完成排序)
/*
// 冒泡排序
for(int i=0; i<arr.length-1; i++){
for(int j=0; j<arr.length-i-1; j++){
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
*/
// 封装冒泡排序方法
static void bubbleSort(int[] arr){
//对冒泡排序内容进行优化
for(int i=0; i<arr.length-1; i++){
boolean flag = true;
for(int j=0; j<arr.length-i-1; j++){
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = false;
}
}
if(flag){
break;
}
}
}
冒泡排序代码原理
1、我们通过循环对比数组两个元素的大小进行排序,每一次循环都会选出最大值,依次往后排列。
2、第一个for循环代表“对比次数”,因为两两对比,所以需要对比 arr.legnth-1 次。
3、第二个for循环代表“最大值位置”,所以每增加一次对比次数,最大值位置就会少一位:
(原)数组为:[3,43,1,56,5,8,9,21],对比顺序为:[3,43]、[43,1]、[43,56]、[56,5]、[56,8]、[56,9]、[56,21],结果如下:
(1)第一次循环最大值 56 将放在倒数第一位,即结果为:[3,1,43,5,8,9,21,56] // 43 大于 1 时交换了位置
(2)第二次循环最大值 43 将放在倒数第二位,即结果为:[1,3,5,8,9,21,43,56] // 3 大于 1 时交换了位置
(3)第三次循环最大值 21 将放在倒数第三位,即结果为:[1,3,5,8,9,21,43,56] // 没有任何一次循环交换位置
(4)第四次~第七次(最后一次)结果都为:[1,3,5,8,9,21,43,56]
4、优化:通过flag判断是否有元素交换位置,若没有即已经完成了排序,所以在第(3)次打断“对比次数”循环。