您的位置:首页 > 职场人生

java面试题7--数组高级-冒泡排序

2016-08-02 22:13 197 查看

冒泡排序

* 冒泡排序基本概念是:

* 依次比较相邻的两个数,将小数放在前面,大数放在后面。

* 即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。

* 然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,

* 直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,

* 将最大的数放到了最后。在第二趟:仍从第一对数开始比较

* (因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),

* 将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),

* 第二趟结束,在倒数第二的位置上得到一个新的最大数

* (其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

掌握主要规律:每一趟遍历总能将最大的数沉底!!!

原理图:



package sort;

public class BubbleSort {

public static void bubbleSort(int [] arr){
//      x:控制外循环趟数,最多需要n-1趟(例:数组长度10,需要比较9趟),
//每一次将最大的数沉底!第一次完毕之后,最大值出现在了最大索引处
for(int x = 0; x<arr.length-1; x++){
//y:控制内循环比较次数,比较次数是递减的,因为大的数已经排好了序,放到了最后面,不需要再比较
for(int y = 0; y<arr.length-1-x; y++){
if(arr[y] > arr[y+1]){
System.out.println("本次交换的数:"+arr[y]+"->"+arr[y+1]);
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
System.out.println("第"+(x+1)+"趟比较完的结果:");
printArray(arr);
}
}

public static void printArray(int [] arr){
System.out.print("[");
for(int x=0;x<arr.length;x++){
if(x==arr.length-1){
System.out.print(arr[x]+"]");
System.out.println();
}else{
System.out.print(arr[x]+", ");
}
}
}
/**
* @param args
*/
public static void main(String[] args) {

int [] a = new int[]{10 ,9, 8, 7, 6, 5, 4, 3, 2, 1};
System.out.println("开始排序");
printArray(a);

bubbleSort(a);
System.out.println("结束排序");
printArray(a);

}

}


开始排序
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
本次交换的数:10->9
本次交换的数:10->8
本次交换的数:10->7
本次交换的数:10->6
本次交换的数:10->5
本次交换的数:10->4
本次交换的数:10->3
本次交换的数:10->2
本次交换的数:10->1
第1趟比较完的结果:
[9, 8, 7, 6, 5, 4, 3, 2, 1, 10]
本次交换的数:9->8
本次交换的数:9->7
本次交换的数:9->6
本次交换的数:9->5
本次交换的数:9->4
本次交换的数:9->3
本次交换的数:9->2
本次交换的数:9->1
第2趟比较完的结果:
[8, 7, 6, 5, 4, 3, 2, 1, 9, 10]
本次交换的数:8->7
本次交换的数:8->6
本次交换的数:8->5
本次交换的数:8->4
本次交换的数:8->3
本次交换的数:8->2
本次交换的数:8->1
第3趟比较完的结果:
[7, 6, 5, 4, 3, 2, 1, 8, 9, 10]
本次交换的数:7->6
本次交换的数:7->5
本次交换的数:7->4
本次交换的数:7->3
本次交换的数:7->2
本次交换的数:7->1
第4趟比较完的结果:
[6, 5, 4, 3, 2, 1, 7, 8, 9, 10]
本次交换的数:6->5
本次交换的数:6->4
本次交换的数:6->3
本次交换的数:6->2
本次交换的数:6->1
第5趟比较完的结果:
[5, 4, 3, 2, 1, 6, 7, 8, 9, 10]
本次交换的数:5->4
本次交换的数:5->3
本次交换的数:5->2
本次交换的数:5->1
第6趟比较完的结果:
[4, 3, 2, 1, 5, 6, 7, 8, 9, 10]
本次交换的数:4->3
本次交换的数:4->2
本次交换的数:4->1
第7趟比较完的结果:
[3, 2, 1, 4, 5, 6, 7, 8, 9, 10]
本次交换的数:3->2
本次交换的数:3->1
第8趟比较完的结果:
[2, 1, 3, 4, 5, 6, 7, 8, 9, 10]
本次交换的数:2->1
第9趟比较完的结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
结束排序
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  冒泡排序