算法:冒泡排序算法
冒泡排序的运作(从后往前):
第一轮:比较每一对相邻的两个元素,如果第一个比第二个大,就进行交换,最后一个元素则是最大的元素。
第二轮:重复以上步骤,除了最后一个。
·····
第n-1轮···
相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定的排序算法。
手动分析:
数 组: 15 2 45 32 56 89 4 15 55 6
第一轮: 2 15 32 45 56 4 15 55 6 89 比较 9 次
第二轮: 2 15 32 45 4 15 55 6 56 比较 8 次
第三轮: 2 15 32 4 15 45 6 55 比较 7 次
第四轮: 2 15 4 15 32 6 45 比较 6 次
第五轮: 2 4 15 15 6 32 比较 5 次
第六轮: 2 4 15 6 15 比较 4 次
第七轮: 2 4 6 15 比较 3 次
第八轮: 2 4 6 比较 2 次
第九轮: 2 4 比较 1 次
代码说明:1、外循环控制比较的轮数,内循环控制每轮比较的次数
2、比较的次数是数组长度-1。
3、交换方法有多种,这里使用的是相加的方法(可以使用如:借助第三变量,移位法等)
4、遍历输出我使用的是forearch循环,也可以使用最普通的for循环,如下:
for(int i = 0; i < nums.length-1; i++){
System.out.print(nums[i]+" ");
}
源代码:
public class shuzu6 {
public static void main(String[] args) {
int[] nums = {15,2,45,32,56,89,4,15,55,6};
//外循环控制比较的轮数
for (int i = 0; i < nums.length-1; i++) {
for (int j = 0; j < nums.length-1-i; j++) {
if(nums[j]>nums[j+1]){
nums[j] = nums[j] + nums[j+1];
nums[j+1] = nums[j] - nums[j+1];
nums[j] = nums[j] - nums[j+1];
}
}
}
for(int n : nums){
System.out.print(n+" ");
}
}
}