入门算法之冒泡排序
来源:互联网 发布:我与网络强国演讲稿 编辑:程序博客网 时间:2024/06/03 21:27
一、冒泡排序的原理:
相邻的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换
例子:
int[] t = {9,0,1,2,8,5,6};
//内循环
从9开始第一次内循环:
第一次:9>0,9与0交换位置,数组t变成
int[] t = {0,9,1,2,8,5,6};
第二次:9>1,9 与1交换位置,数组t变成
int[] t = {0,1,9,2,8,5,6};
第三次:9>2,9与2交换位置,数组t变成
int[] t = {0,1,2,9,8,5,6};
第四次:9>8,9与8交换位置,数组t变成
int[] t = {0,1,2,8,9,5,6};
第五次:9>5,9与5交换位置,数组t变成
int[] t = {0,1,2,8,5,9,6};
第六次:9>6,9与6交换位置,数组t变成
int[] t = {0,1,2,8,5,6,9};
自此,第一次内循环就结束了,我们可以发现,数组t的长度为7,而内循环的次数为7-1=6
外循环
第二次,从0开始从左至右与相邻的数字比较,开始第二次内循环比较
第一次:0<1,0和1不发生交换,数组t变成
int[] t = {0,1,2,8,5,6,9};
第二次:1<2,1和2不发生交换,数组t变成
int[] t = {0,1,2,8,5,6,9};
第三次:2<8,2和8不发生交换,数组t变成
int[] t = {0,1,2,8,5,6,9};
第四次:8>5,8和5发生交换,数组t变成
int[] t = {0,1,2,5,8,6,9};
第五次,8>6,8和6发生交换,数组t变成
int[] t = {0,1,2,5,6,8,9};
第六次,8 <9,8和9不发生交换,数组t变成
int[] t = {0,1,2,5,6,8,9};
至此,第二次内循环结束,由于我写的数组例子不好,到此次循环,数组t已经从小打到排序结束,实际上,还是要进行第三次外循环,依旧从数组t的首位开始,依次相邻的两个相比,外循环的次数就等于数组的长度
——————————————————————————————- 总结:1、冒泡排序由两次组成,外循环次数为数组长度,内循环次数为数组长度-1
//以下由代码实现以上逻辑public class Demo { public static void main(String[] args) { int[] t = { 9, 0, 1, 2, 8, 5, 6 }; // 外循环 for (int i = 0; i < t.length; i++) { for (int j = 0; j < t.length - 1; j++) { // 如果t[j]>t[j+1],则两两交换 // 定义一个临时变量temp储存t[j] if (t[j] > t[j + 1]) { int temp = t[j]; t[j] = t[j + 1]; t[j + 1] = temp; } } } // 输出排序后的数组t的结果 for (int a = 0; a < t.length; a++) { System.out.println(t[a]); } }}
输出结果:
0
1
2
5
6
8
9
0 0
- 算法入门之冒泡排序
- 入门算法之冒泡排序
- 排序算法入门之冒泡排序
- 排序算法入门之冒泡排序优化
- 排序算法入门之冒泡排序
- 排序算法入门之冒泡排序优化
- 排序算法入门之冒泡排序
- 排序算法入门之冒泡排序
- 排序算法入门之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之 冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- 算法之冒泡排序
- Objective-c——理解与特性
- 深入类加载器二----主动引用和被动引用
- CodeForces 703D Mishka and Interesting sum (树状数组处理异或和)
- 趣好玩开发日志 02-day
- const常量
- 入门算法之冒泡排序
- POJ 1330 Nearest Common Ancestors(LCA,在线处理三种方式)
- AndroidDeveloper Weekly NO.4
- Ubuntu16.04下载编译Android6.0源码以及我所踩的坑
- tomcat运行程序失败:更改端口号方法,Several ports (8005, 8080, 8009)
- Maven 安装ojdbc6.jar
- 深入类加载器----类加载器的分类和等级
- LintCode:复制带随机指针的链表
- DevOps linux 常用命令