排序算法——冒泡与选择

一.原理解析

1.1 选择排序法

用一个数组的0索引元素依次和后面的元素两两进行比较,较小者往前放,第一次比较完,最小值出现在0索引处,比较的次数为数组长度-1

1.2 冒泡排序法

用一个数组的0索引元素依次和后面的元素两两进行比较,较大者往后放,第一次比较完,最大值出现在最大索引处,比较的次数为数组长度-1

1.3 原理图

在这里插入图片描述

二.代码

2.1 选择排序法

public class Test1 {
	public static void main(String[] args) {
		int [] arr = {1,15,8,97,78,25,36,79,88,97};
		long start=System.nanoTime(); //获取程序开始时间
		selectSort(arr);
		long end=System.nanoTime(); //获取结束时间
		System.out.println("程序运行时间: "+(end-start)+"ns");	
	}		
	public static void selectSort(int[] arr){
		for(int i = 0 ; i < arr.length - 1; i++){
			//内循环,是每次都在减少,修改变量的定义
			for(int j = i+1 ; j < arr.length ; j++){
				//数组的元素进行判断
				if(arr[i] > arr[j]){
					//数组元素换位
					int temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp; 
					}
				}
			}
		}
}

2.2 冒泡排序法

public class Test {
	public static void main(String[] args) {
		int [] arr = {1,15,8,97,78,25,36,79,88,97};
		long start=System.nanoTime(); //获取程序开始时间
		bubbleSort(arr);
		long end=System.nanoTime(); //获取结束时间
		System.out.println("程序运行时间: "+(end-start)+"ns");	
	}		
	public static void bubbleSort(int[] arr){		
		for(int x = 0 ; x < arr.length-1 ; x ++){ //比较的次数
			for(int y = 0 ; y < arr.length-1-x; y ++){
				//判断:两两比较,大的往后放..
				if(arr[y] > arr[y+1]){
					int temp = arr[y] ;
					arr[y] = arr[y+1] ; 
					arr[y+1] = temp ;					
				}
			}
		}		
	}
}

三.执行效率比较

以下表格内数据是使用冒泡排序法和选择排序法分别对包含10个元素的无序数组排序10次所使用的时间:

从均值数据来看,选择排序法的效率还是优于冒泡排序法的!

四.心得

学习了冒泡排序法、选择排序法和二分查找法以后,使我对算法产生了浓厚的兴趣,以我目前的认知来说,算法就是一条通往答案的捷径,起初是没有的,但是千千万万的前辈们作为探路者帮我们探索出来了!今后,我也会在这条路上继续探索!
当初决定转行时,就怕自己学不懂,毕竟是一个没怎么接触过的领域,随着学习的东西越来越多,虽然有时也会有疑惑,但是问同学、老师明白了以后的恍然大悟,敲出来的代码,自己查查找找,把bug解决完成功跑起来的成就感,使我乐在其中!希望在以后的学习中,我也能继续保持这种心态吧!
不忘初心,方得始终!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值