冒泡排序算法和选择排序算法

冒泡排序算法和选择排序算法

冒泡排序算法

冒泡排序算法简单来说就是:一串数字,相邻的两个数进行两两比较,如果这两个数字的顺序不满足自己想要排序的要求,就让这两个数交换位置,具体解释如下:

给如下一串没有顺序的数(升序)
12  9  15  5  0  
第一轮比较 (比较4次,最大的数值到了最后一位)
9   12 5   0  15
第二轮比较(比较3次,倒数第二位也排好难)
9  5  0   12  15
第三次比较(比较2次,倒数第三位排好)
5  0  10 12  15
第四次比较(比较一次)
0  5  10  12  15

从上边观察可以了解到,第一轮比较的话,可以使用一次循环即可以实现,一共需要四轮循环比较,可以使用嵌套循环来实现,外层循环控制比较轮数,内层控制比较次数,代码如下:

//定义一个数组:12  9  15  5  0 
		int[] arr = {12,9,15,5,0};
		int temp;//用于调换位置
		for(int i=0;i<arr.length-1;i++){//外层循环控制循环轮数,循环轮数总比数的个数少1
			for(int j =0;j<arr.length-1-i;j++){
			//内层控制每一轮的比较次数,(从上数据可发现每轮比较次数依次为4,3,2,1;每轮次数一次减1,而输的个数减i值再减1正巧是循环次数的值)
				if(arr[j]>arr[j+1]){//开始比较,不满足要求的调换顺序
					temp=arr[j+1];
					arr[j+1]=arr[j];
					arr[j]=temp;
				}
			}
		}
		//打印验证
		for(int i=0;i<arr.length;i++){
			System.out.println(arr[i]+"\t");
		}
        //打印结果  0	5	9	12	15

选择排序算法

选择排序算法即在选择第一个数与与其他数依次进行比较,不满足排列顺序两个数交换位置,最终找出最大(或最小)的数,具体解释如下:

给一串数(升序)
12	5	9	10	0
第一个与其他的依次比较,取小的再与剩下的数依次比较,依次类推找出最小的数
第一轮 比较40	12	9	10	5
第二轮 比较30	5	12	10	9
第三轮 比较20	5	9	12	10
第四轮 比较10	5	9	10	12

与冒泡排序算法相同,同样可以使用两层循环来排序,用来控制每一轮的比较次数,外层用来控制比较层数,具体代码实现如下:

//定义一个数组:
		int[] num = {12,5,9,10,0};
		int number;//用来交换顺序
		for(int i=0;i<num.length-1;i++){//控制循环轮数,轮数比长度少1
			for(int j=i+1;j<num.length;j++){
			//若以num[i]作为第一个数,那么比较的那个数应该为i+1,
			//以num[j]作为比较的数,j=i+1;
			//想每轮比较次数依次递减,则需要小于num.length
			if(num[i]>num[j]){//不符合要求的交换顺序
				number=num[j];
				num[j]=num[i];
				num[i]=number;
			}
			}
			
		}
		//遍历验证
			for(int i=0;i<num.length;i++){
			System.out.println(num[i]+"\t");
		}

冒泡排序与选择排序在同为升序的情况下(所选择的数据都是从前边开始选的情况下),冒泡排序先找出最后的数(从后向前依次排序),选择排序先找出第一个数(从前向后依次排序)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值