原理:比较数组相邻的两个数,较大的交换至右端(或左端)。
例如:将数组 int[ ] arr = {5,3,8,7,2} 从小到大排序。
思路:依次比较数组中相邻的两个数,小数放在前面,大数放在右面,即第一次遍历:将第1个数和第2个数比较,大数放在后面,小数放在前面。然后第2个数和第3个数比较,大数放后面,小数放在前面,依次进行下去直至排列完成。一次遍历会将数组内最大数排列至最后,第二次遍历排列除最后一项即可,即进行arr.length-1次遍历即可完成排序。
第一次遍历:
5和3比较:5>3,交换位置。int[ ] arr = {3,5,8,7,2}.
5和8比较:5<3,不交换位置。int[ ] arr = {3,5,8,7,2}.
8和7比较:8>7,交换位置。int[ ] arr = {3,5,7,8,2}.
8和2比较:8>2,交换位置。int[ ] arr = {3,5,7,2,8}.
第二次遍历:
3和5比较:3<5,不交换位置。int[ ] arr = {3,5,7,2,8}.
5和7比较:5<7,不交换位置。int[ ] arr = {3,5,7,2,8}.
7和2比较:7>2,交换位置。int[ ] arr = {3,5,2,7,8}.
第三次遍历:
3和5比较:3<5,不交换位置。int[ ] arr = {3,5,2,7,8}.
5和2比较:5>2,交换位置。int[ ] arr = {3,2,5,7,8}.
第四次遍历:
3和2比较:3>2,交换位置。int[ ] arr = {2,3,5,7,8}.
Java代码实现如下:
public static void main(String[] args) {
int[ ] arr = {5,3,8,7,2};
int temp=0;//用于存放比较数第一个数的值
for(int i=0;i<arr.length-1;i++) {//外循环次数:总共遍历多少次
for(int j=0;j<arr.length-1-i;j++) {//内循环次数:比较多少次
if(arr[j]>arr[j+1]) {
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(int num:arr) {
System.out.print(num+" ");
}
}