选择排序 java

2 篇文章 0 订阅
2 篇文章 0 订阅

选择排序

先说一下该算法的优缺点
优点:效率高
缺点:无论数组混乱度高低,都必须遍历完才跳出算法,不稳定排序

这里使用一个倒序数组测试
{ 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}

图示

选择排序
在图中,以下操作执行了九次,因为在这个例子中,首元素9就是最大的后面每次遇到的元素都比它小,min的值从9依次变成最后的0

			if(arr[j] < arr[min]){
					min = j; 			
			}

比较难理解的是min的作用
我们想象第二次排序就好理解,i 下标从0++变成了1,这时候继续把最小元素下标假设给 i,然后用 j 循环找比它小的元素的下标。找到后把这个最小元素的下标赋值给min,这时min就相当于一个中间容器的作用。

min是必须存在的
因为我们注意到交换操作是发生在 j 的for循环外,用 i 和 min 控制元素位置进行交换

其实就是 i 先声明它位置上的元素是剩下的元素中最小的 i 之前的元素已经排好序了 然后就占在剩下的数组中第一的位置,这时候我们派出min在剩下的元素中找找看是不是有其他最小的元素,找到后和 i 换位置就行了,i 位置上的值到底多大多小无所谓

每次 i 循环的效果就是把数组中最小的元素换到了第一位。
之后就不管它了,++ 从后面的元素中再找出最小的换到第一位。

	public static void main(String[] args) {
		int[] arr = { 9,8,7,6,5,4,3,2,1,0 };
		int temp = 0;
		
		for(int i = 0; i < arr.length - 1; i ++) {	
			int min = i; //假设i下标的元素是最小元素,这里先把第一个元素假设为最小元素
			//min是数组下标
			for(int j = i + 1; j < arr.length; j ++) {	
				//从第二个也就是i+1个元素开始找更小的元素
				if(arr[j] < arr[min]) //一旦发现第j个元素比假设的这个最小元素还小
					min = j; //就把最小元素下标赋值给min				
			}
			//确保把真正最小的元素和数组第一个元素交换(后面就是和第2,3,4...个元素交换用i++控制)
			temp = arr[min];
			arr[min] = arr[i];
			arr[i] = temp;
		}
		
		for(int i = 0; i < arr.length; i ++)
			System.out.print(arr[i] + " ");
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值