Java小白入门200例53之冒泡排序
Posted 编程界明世隐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java小白入门200例53之冒泡排序相关的知识,希望对你有一定的参考价值。
作者简介
作者名:编程界明世隐
简介:CSDN博客专家,从事软件开发多年,精通Java、javascript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢迎您关注,期待与您一起学习、成长、起飞!
引言
很多Java初学者问我,新手明明很用心、很努力学习的Java知识,转头又忘记了,很让人犯愁,小白如何能够快速成长、成为大牛呢?
其实要成为大神的技巧只有一个:“多学多练”,于是明哥就整理了比较典型的练习实例,通过练习能够快速提升编码技巧和熟练度,让你在成为大佬的路上一去不复返(切记要亲手练习哦)!
导航
✪ Java小白入门200例系列目录索引
◄上一篇 52.实现淡旺季飞机票打折
►下一篇 54.打印水仙花数
什么是冒泡排序
依次比较两个相邻的子元素,如果他们的顺序错误就把他们交换过来,重复地进行此过程直到没有相邻元素需要交换,即完成整个冒泡。
现在设定一个数组,元素为 2,4,3,1 我们需要通过冒泡最终排序成1,2,3,4 用图来说明一下:
首先我们就对第一个元素2和第2个元素4进行比较,如果第一个元素大于第2个元素则交换位置,否则不交换
实现冒泡排序
第一次冒泡
int[] arr = new int[] { 2, 4, 3, 1 };
if(arr[0]>arr[1]){//第一个元素大于第2个元素则执行交换,否则不做操作
int temp = arr[1];
arr[1] = arr[0];
arr[0] = temp;
}
执行后发现不需要交换,于是得到顺序如下
再来处理第2个元素和第3个元素:
于是我们代码编写如下:
int[] arr = new int[] { 2, 4, 3, 1 };
if(arr[0]>arr[1]){
int temp = arr[1];
arr[1] = arr[0];
arr[0] = temp;
}
if(arr[1]>arr[2]){
int temp = arr[2];
arr[2] = arr[1];
arr[1] = temp;
}
执行后发现,4大于3 需要交换位置,交换完后顺序如下:
再来比较最后两个元素,也就是现在的4和1
于是我编写代码如下:
int[] arr = new int[] { 2, 4, 3, 1 };
if(arr[0]>arr[1]){
int temp = arr[1];
arr[1] = arr[0];
arr[0] = temp;
}
if(arr[1]>arr[2]){
int temp = arr[2];
arr[2] = arr[1];
arr[1] = temp;
}
if(arr[2]>arr[3]){
int temp = arr[3];
arr[3] = arr[2];
arr[2] = temp;
}
发现次数4大于1需要换行位置,结果如下
至此我们完成了第一次冒泡,最大的元素4冒泡到最后,现在来优化一下这段代码
细看这段代码,我们很容易发现规律,这里面的0,1,2,3不就是元素对应的下标吗?执行的次数刚好是数组的长度减1,那我们用循环不就可以了,修改以后:
int[] arr = new int[] { 2, 4, 3, 1 };
for(int j = 0; j < arr.length-1; j++){
if(arr[j]>arr[j+1]){
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
第二次冒泡
因为4已经移动到最后了,此时需要排序的就剩下前面3个元素了
那这个代码就很好写了,无非就是比上一次循环少一个元素
在上次循环的基础上,循环的判断条件减去1,就可以达到这个效果
int[] arr = new int[] { 2, 4, 3, 1 };
for(int j = 0; j < arr.length-1; j++){
if(arr[j]>arr[j+1]){
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
for(int j = 0; j < arr.length-1-1; j++){
if(arr[j]>arr[j+1]){
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
运行后此时的顺序是这样的 2 1 3 4
第三次冒泡
还需要比较前面两个元素,那我们加上代码
int[] arr = new int[] { 2, 4, 3, 1 };
for(int j = 0; j < arr.length-1; j++){
if(arr[j]>arr[j+1]){
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
for(int j = 0; j < arr.length-1-1; j++){
if(arr[j]>arr[j+1]){
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
for(int j = 0; j < arr.length-1-2; j++){
if(arr[j]>arr[j+1]){
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
我们来运行一下,看看结果
结果就是1,2,3,4 至此效果已经实现了,但是代码还是需要改进的,来看看目前代码的规律
我们很容易发现其实除了图中框住的以外,都是相同的,是不是在这里做做文章呢,如果我再加一个东西是不是你就看出规律了
从0到1到2,是不是很像数组的下标,而且是依次递增的,让我们很容易的想到这里可以再次利用数组的循环,同时我们把图中的里面0,1,2换成对应的下标就好了。
for (int i = 0; i < arr.length-1; i++)
{
for(int j = 0; j < arr.length-1-i; j++){
if(arr[j]>arr[j+1]){
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
甚至还可以把 arr.length-1 这个判断添加再提出来
int[] arr = new int[] { 2, 4, 3, 1 };
int condition = arr.length-1;
for (int i = 0; i < condition; i++)
{
for(int j = 0; j < condition-i; j++){
if(arr[j]>arr[j+1]){
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
修改数据再试一下
public static void main(String[] args)
{
int[] arr = new int[] { 2000, 400, 30, 100,50,60 };
int condition = arr.length-1;
for (int i = 0; i < condition; i++)
{
for(int j = 0; j < condition-i; j++){
if(arr[j]>arr[j+1]){
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
for (int i = 0; i < arr.length; i++)
{
System.out.print(arr[i] + " ");
}
}
运行结果
小结
这节总结了“冒泡排序”,希望能对大家有所帮助,请各位小伙伴帮忙 【点赞】+【收藏】+ 【评论区打卡】, 如果有兴趣跟小明哥一起学习Java的,【关注一波】不迷路哦。
评论区打卡一波让我知道你,明哥会持续关注你的学习进度哦!
导航
✪ Java小白入门200例系列目录索引
◄上一篇 52.实现淡旺季飞机票打折
►下一篇 54.打印水仙花数
热门专栏推荐
1.Java小游戏系列(俄罗斯方块、飞机大战、植物大战僵尸等)
2.JavaWeb项目实战(图书管理、在线考试、宿舍管理系统等)
3.JavaScript精彩实例(飞机大战、扫雷、贪吃蛇、验证码等)
4.Java小白入门200例
5.从零学Java、趣学Java、以王者荣耀角度学Java
以上是关于Java小白入门200例53之冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章
Java小白入门200例65之Java sort()数组排序