冒泡排序
来源:互联网 发布:linux系统usb无线网卡 编辑:程序博客网 时间:2024/06/05 09:24
全代码
/** * * @param array * @param desc=true,为升序,false为降序 * @return */ public static int[] order(int[] array,boolean desc){ boolean isChange; for(int j =0;j<array.length-1;j++){ isChange = false; int a = array[0]; for(int i=1;i<array.length -j;i++){ if(desc){ if(a>array[i]){ array[i-1] = array[i]; array[i] = a; isChange = true; }else { a = array[i]; } }else { if(a<array[i]){ array[i-1] = array[i]; array[i] = a; isChange = true; }else { a = array[i]; } } }// for(int i=0;i<array.length;i++){// System.out.print(array[i]+", ");// if(i == array.length-1){// System.out.println();// }// } if(!isChange){ break; } } return array; }
解析:(以升序为例)代码由里层循环向外层循环看。
//第一循环,将最大的数排在末尾。int a = array[0]; for(int i=1;i<array.length;i++){ if(a<array[i]){ array[i-1] = array[i]; array[i] = a; }else { a = array[i]; } }
当进行第二次循环时,就不用再去管排在末尾的数了,因为末尾已经是最大的。
同理,进行第三次循环时,就不用再去管后两位的数了,因为已经末尾后两位已经拍好序。
依次下去,可以得到下面代码
for(int j=0;j<array.length-1;j++){ int a = array[0]; for(int i=1;i<array.length-j;i++){//将判断条件改为i<array.length-j if(a<array[i]){ array[i-1] = array[i]; array[i] = a; }else { a = array[i]; } } }
在某次循环时,没有相邻的数据进行交换,即排序已经完成;不需要在进行比对,就可跳出循环,完成排序;所以设置标志为 isChange
请用数组 int[] array = {6,8,2,6,45,21,75,89,32,12,21,54};
和 int[] array = {6,8,2,6,45,21,75,89,32,12,21,54,1};
测试,以便更好理解。
0 0
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- Linux查询主机工作状态
- Ubuntu mongodb 安装和配置
- 利用pgpool-II搭建postgresql集群的并行查询模式
- 关于ImageView的setColorFilter()
- android ImageView布局时出现警告的解决
- 冒泡排序
- System.exit(0)和System.exit(1)区别
- 【Leet Code】56. Merge Intervals---Hard
- Oracle Execute to Parse 执行解析比分析
- Extjs序号分页切换时,序号的问题
- Riot工程师:三步让你的游戏更新更快更小
- [LeetCode] Number of Digit One
- iOS 一个label中显示不同颜色的文字
- 关于bios中设置upan启动