首页 > 代码库 > 冒泡排序
冒泡排序
一、冒泡排序概念以及分析
数组里面,相邻的两个数相比较,小的数放到前面,大的数放到后面。
第一次比较:第一个数和第二个数比较,小的数放在前面,大的数放在后面。然后第二个数和第三个数相比较,小的数放在前面,大的数放在后面,依次类推,直到最后两个数字比较完,第一次比较结束;这个时候,最后一位数已经是最大的数,第二次比较就不用把最后一位数考虑进去。
第二次比较:第一个数和第二个数比较,小的数放在前面,大的数放在后面。然后第二个数和第三个数相比较,小的数放在前面,大的数放在后面,依次类推,直到最后两个数字比较完,第二次比较结束;这个时候,倒数第二位数已经是最大的数,第三次比较就不用把倒数第二位考虑进去。
第三次比;第四次;第五次;这样依次比较,就会排序到从小到大。
二、实现思路
这里每次比较都是重复动作,所有我们可以要用到循环来减少写代码的次数;并且要用到两重循环;
1.外循环变量定义为i,内层循环变量定义为j,外循环表示循环多少次,内循环表示每次是那两个元素比较;
2.如果这个数组长度为n,外循环重复n-1次,内循环依次重复n-1,n-2,n-3.....1次;
3.内循环变量j表示数组的索引下标;每次比较的两个元素则是a[j]和a[j-1];
4.数字交换需要用到第三个变量;
5.排序过后将数组遍历输出。
三、代码实现
int []a=new int [n];//定义一个长度为n的数组
for(int i=1;i<a.length;i++){//外层循环;比较总次数
boolean Isfind=false;//定义一个布尔值,减少不必要的循环,如果第二趟就刚好排序成功,就不用继续排序了
for(int j=0;j<a.leng-i;j++){//内层循环,每次比较的次数
if(a[j]>a[j+a]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
Isfind=true;
}
}
if(!Isfind) break;//如果Isfind为假,则结束循环
}
//排序结束,遍历输出数组
for(int i=0;i<a.length;i++){
systmep.out.print(a[j]);
}
冒泡排序