昨天面试,碰到的面试题,很久不写了,没写出来,挺糗的!
冒泡排序是所有排序中相对简单的一种排序,所以对于新手来说,掌握一种排序方法会给你意想不到的惊喜。
下面开始正题,冒泡排序的基本思想就是,两两相邻比较,如果反序则交换位置,知道没有反序为止。
下面是代码,笔者把关键代码做了注释,希望对大家有所帮助。
package bubble;
public class Bubble {
public static void main(String [] args){
int array[]={12,45,16,798,45,23,49,78,94,19};
System.out.println("原始数组为:");
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
/*
* 下面的两层for循环是关键代码
* 内层的for循环是用来将数组中相邻的两个元素进行比较,
* 符合if条件的就交换位置,不符合,就不执行代码块
* 其中array[j]<array[j+1]代表当前元素和当前元素的后一个元素比较大小
*
* 而外层循环约束着排序的轮数,即总共需要多少轮的排序
* 一轮排序过后,通过i++逐一排除已经排序好的数组,进行下一轮的排序
*/
for(int i=0;i<array.length;i++){
for(int j=0;j<array.length-1-i;j++){
if(array[j]<array[j+1]){
int temp=array[j+1];
array[j+1]=array[j];
array[j]=temp;
}
}
//打印每次排序的结果,其中的i+1是因为i是第一轮的数组下标,加上1才是排序的轮数
System.out.println("\n"+ "第"+(i+1)+"次的排序结果是:");
for( int m=0 ;m<array.length;m++){
System.out.print(array[m]+" ");
}
}
System.out.println("\n"+"排序后的数组为:");
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
}
}
下面是运行的结果:
原始数组为:
12 45 16 798 45 23 49 78 94 19
第1次的排序结果是:
45 16 798 45 23 49 78 94 19 12
第2次的排序结果是:
45 798 45 23 49 78 94 19 16 12
第3次的排序结果是:
798 45 45 49 78 94 23 19 16 12
第4次的排序结果是:
798 45 49 78 94 45 23 19 16 12
第5次的排序结果是:
798 49 78 94 45 45 23 19 16 12
第6次的排序结果是:
798 78 94 49 45 45 23 19 16 12
第7次的排序结果是:
798 94 78 49 45 45 23 19 16 12
第8次的排序结果是:
798 94 78 49 45 45 23 19 16 12
第9次的排序结果是:
798 94 78 49 45 45 23 19 16 12
第10次的排序结果是:
798 94 78 49 45 45 23 19 16 12
排序后的数组为:
798 94 78 49 45 45 23 19 16 12
建议初学的朋友们一定一定要自己至少敲三遍,程序员最怕的就是眼高手低!!!