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]
相关文章推荐
- java面试题9--数组高级-二分查找
- java面试题8--数组高级-选择排序
- JAVA基础再回首(十一)——数组高级(冒泡排序和选择排序)、Arrays类、基本类型包装类、Integer类
- 对象数组[置顶] java高级工程师-----JSON和XML的使用
- Java高级面试题【转】
- Java面试题:有数组a[n],用java代码将数组元素顺序颠倒
- Java面试题:有数组a[n],用java代码将数组元素顺序颠倒
- Java面试题:1-100之间的数,被放在数组a[99]中,有一个数没有包含在其中,用java代码找出这个数
- 多线程并发库高级应用 之 使用java5中同步技术的3个面试题
- java面试题——冒泡排序
- Java 一维数组,二维数组的定义声明 以及一维数组的 冒泡排序 以及二维数组的鞍点
- Java由基础到高级面试题经典问答
- 阿里巴巴软件招JAVA高级工程师面试题
- Java高级面试题
- 游戏公司面试题:Java如何实现二维逆时针旋转数组
- Java高级面试题【转】
- Java面试题:1-100之间的数,被放在数组a[99]中,有一个数没有包含在其中,用java代码找出这个数
- Java面试题:1-100之间的数,被放在数组a[99]中,有一个数没有包含在其中,用java代码找出这个数
- Java高级面试题【转】
- 风林火山高级java工程师面试题