冒泡排序
思想:经过一轮遍历比较,把最大的放在数组的末尾
java
复制代码
int[] a = {3, 2, 1};
for( int i = 0; i < a.length-1; i++){
for( int j = 0; j < a.length-1-i; j++){
if(a[j] > a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for( int i = 0; i < a.length; i++){
System.out.print(a[i]+ " ");
}
分析过程
分析冒泡排序
初始数组
复制代码
### `[24, 69, 80, 57, 13]`
第 1 轮排序:目标把最大数放在最后
复制代码
### 第 1 次比较:`[24, 69, 80, 57, 13]`
复制代码
### 第 2 次比较:`[24, 69, 80, 57, 13]`
复制代码
### 第 3 次比较:`[24, 69, 57, 80, 13]`
复制代码
### 第 4 次比较:`[24, 69, 57, 13, 80]`
第 2 轮排序:目标把第二大数放在倒数第二位置
复制代码
### 第 1 次比较:`[24, 69, 57, 13, 80]`
复制代码
### 第 2 次比较:`[24, 57, 69, 13, 80]`
复制代码
### 第 3 次比较:`[24, 57, 13, 69, 80]`
第 3 轮排序:目标把第 3 大数放在倒数第 3 位置
复制代码
### 第 1 次比较:`[24, 57, 13, 69, 80]`
复制代码
### 第 2 次比较:`[24, 13, 57, 69, 80]`
第 4 轮排序:目标把第 4 大数放在倒数第 4 位置
复制代码
### 第 1 次比较:`[13, 24, 57, 69, 80]`
思路:
1. 外层for
循环:表示需要进行排序的轮次,即每一次都找出最大的数排在队尾,需要排序数组长度-1
次才可以排完
2. 内层for
循环:表示每一轮排序把最大的放在数组末尾的这个过程的实现元素之间需要比较的轮次,每排序好一个元素,比较的轮次就减少,和外层循环有关
大体思想:化繁为简,先死后活,由内层推出的外层
拓展延申:从大到小排序怎么实现?
修改比较的方式即可
从小到大排序:前面
的比后面
大就交换
从大到小排序:后面
的比前面
小就交换
从大到小排序代码示例
java
复制代码
int[] a = {3, 2, 1};
for( int i = 0; i < a.length-1; i++){
for( int j = 0; j < a.length-1-i; j++){
if(a[j] < a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for( int i = 0; i < a.length; i++){
System.out.print(a[i]+ " ");
}