算法学习笔记(2)-选择排序

    选择排序(Select Sort)的思想是,在比较开始前将最小值假定为第一个数,在每轮循环的比较中找出最小的那个数,将其放到数组的前面。 

Java代码:

public class SelectSort {
	public static void main(String[] args) {
		int[] array = {7,5,3,8,4,1,3,61,13,31,11,3};
		System.out.println("选择排序前:");
		for(int arr:array){
			System.out.print(arr+" ");
		}
		
		//为选择排序定义一个最小值的索引minIndex=0,即第一个数
		int minIndex = 0;
		 for(int i = 0; i <array.length ;i ++){
			 //从第二个数开始判断,将最小数的索引记录下来,因为前者的已经排序好了
			 for(int j = i + 1;j < array.length;j ++){
				 //如果其他的数小于第一个数,那么将这个数的索引和值记录下来
				 if(array[j] < array[minIndex]){
					 //将最小数的索引j赋值给minIndex
					 minIndex = j;
				 }
			 }
			 //将最小数和第1个数交换(第2、3、4、、、)
			 int temp = array[minIndex];
			 array[minIndex] = array[i];
			 array[i] = temp;
			 //将最小数的索引假定为第i+1个
			 minIndex = i + 1;
		 }
			//输出选择排序的结果
				System.out.println("\n"+"选择排序的结果为:");
				for(int arr:array){
					System.out.print(arr+" ");
				}
	}	
}

 

结果:

 

动画演示:

https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html

 

思考:

1、选择排序和冒泡排序的时间复杂度都为O(N^2),但是没一轮循环只需要交换一个数,而冒泡排序在每一轮循环都要交换至少一个数,所以选择排序在时间上会优于冒泡排序。

2、选择排序需要指定第1个数为最小数,在循环完后,将第一个数与真正的最小数交换,第二轮循环要假设第2个数为最小数,而不是第1个数为最小数,因为已经判断完了,第1个数一定是最小数了,接下来的循环也同理,每次循环前要将最小数的索引往后推移一位。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值