"冒泡排序"算法-图文代码教你轻松简单理解-java编程
2016-06-08 01:26
543 查看
1.概念
关于java的经典排序,不得不提到冒泡排序,什么是冒泡排序,和前面讲的选择排序有什么不同?起始大家可以把"冒泡"理解成一个一个数字冒起来,每轮排序都得到一个最大数在右边,下面我通过讲解其特点,并画图帮组大家理解.
2.特点
1.每次比相邻两个 2.从左边开始: 1.第0个和第1个比,大的排后 2.第1个和第2个比,大的排后 3.第2个和第3个比,大的排后 4.第3个和第4个比,大的排后 =>1轮过后的最大的放后面; =>2轮过后的得倒数第2大; =>3轮过后的得倒数第3大; =>4轮过后的得倒数第4大; 3.最终得出结果
3.过程图解
4.代码详情
code/** * 冒泡排序 * * 总思路: * 1.每次比相邻两个 * 2.从左边开始: * 1.第0个和第1个比,大的排后 * 2.第1个和第2个比,大的排后 * 3.第2个和第3个比,大的排后 * 4.第3个和第4个比,大的排后 * =>1轮过后的最大的放后面; * =>2轮过后的得倒数第2大; * =>3轮过后的得倒数第3大; * =>4轮过后的得倒数第4大; * 3.最终得出结果 * * 优化,看完成的代码: * 1.从外往里看,第一轮后得到最大在后 * 2.第二轮后里面就可用少一次不用比了 所以可以变成i<length-1-j; * */ public class Demo03 { public static void main(String[] args) { int[] arr = { 4, 2, -6, 9, 1 };//角标0-4,length=5; print(arr,"初始"); bubbleSort(arr); print(arr,"结果"); } private static void bubbleSort(int[] arr) { for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr.length-1-i; j++) {//-1防越界,//-i 优化,因为每次已经得出最右一位 if (arr[j] > arr[j + 1]) { //两个连续的逐个比就是j和j-1; swap(arr, j, j + 1);//替换 } } print(arr,"第"+(i+1)+"轮"); } } private static void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } private static void print(int[] arr,String str) { for (int i = 0; i < arr.length; i++) { if (i != arr.length - 1) { if (i == 0) { System.out.print("[" + arr[i] + ","); } else { System.out.print(arr[i] + ","); } } else { System.out.println(arr[i] + "]"+"----"+str); } } } }
.运行结果
[4,2,-6,9,1]----初始 [2,-6,4,1,9]----第1轮 [-6,2,1,4,9]----第2轮 [-6,1,2,4,9]----第3轮 [-6,1,2,4,9]----第4轮 [-6,1,2,4,9]----第5轮 [-6,1,2,4,9]----结果
5.总结
大家只要记住冒泡排序的特点即可,抓住特点就能理解其过程,然后通过for循环并逐个对比ints[j]和ints[j+1]就可得出结果.
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序