冒泡排序

@Test
public void maoPao2(){
int[] a = {3,8,6,2,15,7};

//第一层for循环控制对比的轮数
for(int i=0;i<a.length-1;i++){

//第二层for循环控制每轮对比的次数

for(int j=0;j<a.length-1-i;j++){
if (a[j]>a[j+1]) {
int t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
//通过循环输出排序后的顺序
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}

}

/*实现的思路:

*第一轮:i=0<6-1
* j<6-1-0 即j<5
* j= 0,1,2,3,4 比五次 ,依次比较
* j=0 <6-1-0 Yes-->a[0]>a[1]? No 数组a 的顺序还是 a={3,8,6,2,15,7}
* 此时:执行 j++ 得:j=1<5 Yes a[1]>a[2] ? Yes 所以a[1]和a[2]交换位置 ,所以此次比较后a的顺序为:a={3,6,8,2,15,7}
* 此时:执行 j++ 得:j=2<5 Yes a[2]>a[3]? Yes 所以a[2]和a[3]交换位置,此次比较后a的顺序为:a={3,6,2,8,15,7}
* 此时:执行 j++ 得:j=3<5 Yes a[3]>a[4]? No 所以a[3]和a[4]无需交换位置,此次比较后a的顺序为:a={3,6,2,8,15,7}
* 此时:执行 j++ 得:j=4<5 Yes a[4]>a[5]? 即第五个大于第六个吗? No 所以a[4]和a[5]交换位置,此次比较后a的顺序为:a={3,6,2,8,7,15}
* 此时:执行 j++ 得:j=5<5 No 所以第一轮对比结束,得到的结果是:a的顺序为:a={3,6,2,8,7,15},
* 即:第一轮对比将最大的一个数排到了最后。
*此时结束第二层for循环跳到第一层for循环
*第二轮对比:
*执行 i++ 得到i=2 < 6-1 Yes
* 进入第二层for循环
* j<6-1-1 即j<4 对比四次 j=0,1,2,3
* 此时:j=0<6-1-1 Yes--> a[0]>a[1]? No 数组a 的顺序还是 a={3,6,2,8,7,15}
* 此时:执行 j++ 得:j=1<4 Yes a[1]>a[2] ? Yes 所以a[1]和a[2]交换位置 ,所以此次比较后a的顺序为:a={3,2,6,8,7,15}
* 依次类推。。。
*得到结果是: a={3,2,6,7,8,15}
*依次类推:
*第三轮 i=2 <6-1 Yes j<6-1-2 即 j<3 ,对比三次 j= 0,1,2
*得到结果是:a={2,3,6,7,8,15}。
*
**第四轮 i=3<6-1 j<6-1-3 即 j<2 j= 0,1 比两次
*得到结果是:a={2,3,6,7,8,15}。、
*第五轮 i=4 i<5 j<6-1-4 即 j<1 j= 0 比一次
*得到结果是:a={2,3,6,7,8,15}。
*第六轮:i=5<5 No 结束
*留有一个疑问点:当对比进行到第三轮的时候,其实已经排完序了,针对造的数据的特殊性,这时候完全可以跳出循环无需在对比下去了,浪费时间!但该如何判断执行到那一轮已经无需再往下对比了呢?
*/

posted @ 2017-10-25 21:13  21heshang  阅读(102)  评论(0编辑  收藏  举报