我是靠谱客的博主 时尚电话,最近开发中收集的这篇文章主要介绍冒泡排序_详解冒泡排序 详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

冒泡排序 详解

原理

首先 我们有一个无序的数组 例如:

int[] num = {5,6,8,4,1,7};

我们把第一次要把最大的数排到整个数组的最后面 得到如下数组

num = {5,6,4,1,7,8};

具体实现原理就是 如果前面一个数比后面的大就交换两个数的位置

5 和 6 比较 5小 位置不变 5,6,8,4,1,7

再 6 和 8 比较 6小 位置不变 5,6,8,4,1,7

再 8 和 4 比较 8大 交换4和8的位置 5,6,4,8,1,7

再 8 和 1 比较 8大 交换1和8的位置 5,6,4,1,8,7

再 8 和 7 比较 8大 交换7和8的位置 5,6,4,1,7,8

我们 再将经过上面步骤处理后的数组 {5,6,4,1,7,8 } 再次执行上面的步骤

5 和 6 比较 5小 位置不变 5,6,4,1,7,8

再6 和 4 比较 4小 交换4和6的位置 5,4,6,1,7,8

再6 和 1 比较 1小 交换1和6的位置 5,4,1,6,7,8

再6 和 7 比较 6小 位置不变 5,4,1,6,7,8

再7 和 8 比较 7小 位置不变 5,4,1,6,7,8

我们 再将经过上面步骤处理后的数组 { 5,4,1,6,7,8 } 再次执行上面的步骤

5 和 4 比较 4小 交换5和4的位置 4,5,1,6,7,8

再5 和 1 比较 1小 交换1和5的位置 4,1,5,6,7,8

再5 和 6 比较 5小 位置不变 4,1,5,6,7,8

再6 和 7 比较 6小 位置不变 4,1,5,6,7,8

再7 和 8 比较 7小 位置不变 4,1,5,6,7,8

我们 再将经过上面步骤处理后的数组 {4,1,5,6,7,8 } 再次执行上面的步骤

4 和 1 比较 1小 交换4和1的位置 1,4,5,6,7,8

再4和 5 比较 4小 位置不变 1,4,5,6,7,8

再5 和 6 比较 5小 位置不变 1,4,5,6,7,8

再6 和 7 比较 6小 位置不变 1,4,5,6,7,8

再7 和 8 比较 7小 位置不变 1,4,5,6,7,8

这样我们就完成了排序

实现代码:

class BubbleSort{
	/*
		冒泡排序
	*/
	public static void main(String[] args){
		int[] num = {5,6,8,4,1,7};
		for(int j=0;j<num.length-1;j++){
			/*
			内层寻环第一次实现将最大的数放在最后一位
					第二次实现将第二大的数放在倒数第二位
					以此类推
			*/ 
			for (int i=0;i<num.length-1;i++ ){
				if(num[i]>num[i+1]){
					/*交换两数的值
					其实和
					int temp = num[i];
					num[i] = num[i+1];
					num[i+1] = temp;
					效果一样
					*/ 
					num[i] = num[i+1]^num[i];
					num[i+1] = num[i+1]^num[i];
					num[i] = num[i+1]^num[i];
				}
			}
		}
		
		for (int a : num ){
			System.out.println(a);
		}
		
	}
}

代码优化

通过原理部分的分析我们可以看到 第一次 我们要比较6次

第二次的时候最后一位已经确定 所以就只用比较5次

以此类推

所以我们对代码进行如下优化:

class BubbleSort{
	/*
		冒泡排序
	*/
	public static void main(String[] args){
		int[] num = {5,6,8,4,1,7};
		for(int j=0;j<num.length-1;j++){
			/*
			内层寻环第一次实现将最大的数放在最后一位
					第二次实现将第二大的数放在倒数第二位
					以此类推
			*/ 
            
            //  对内层循环的次数进行控制  让他比较的次数随外层次数的增加而减少
			for (int i=0;i<num.length-1-j;i++ ){
				if(num[i]>num[i+1]){
					/*交换两数的值
					 其实和
					int temp = num[i];
					num[i] = num[i+1];
					num[i+1] = temp;
					效果一样
					*/ 
					num[i] = num[i+1]^num[i];
					num[i+1] = num[i+1]^num[i];
					num[i] = num[i+1]^num[i];
				}
			}
		}
		
		for (int a : num ){
			System.out.println(a);
		}
		
	}
}

代码优化后 可以减少代码执行时间 提高代码运行效率

最后

以上就是时尚电话为你收集整理的冒泡排序_详解冒泡排序 详解的全部内容,希望文章能够帮你解决冒泡排序_详解冒泡排序 详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(24)

评论列表共有 0 条评论

立即
投稿
返回
顶部