选择排序再理解

  在学习了冒泡排序之后,再来学习选择排序应该就能更好理解这个算法了。
  选择排序比较直观,就是从没有排序的元素中选出最大或最小的元素放到已排序好的元素后面。


选择排序
 1、比较未排序区域的元素,选出最大或最小的元素放到排序区域。
 2、一趟比较完成之后,再从剩下未排序的元素开始比较。
 3、反复执行以上步骤,只到排序完成。


算法

function selectSort(nums){
	let n = nums.length;
	let minIndex,temp;
	for(let i=0;i<n-1;i++){
		minIndex = i;
		for(let j=i+1;j<n;j++){
			if(nums[minIndex]>nums[j]){
				minIndex = j;
			}
		}
		temp = nums[i];
		nums[i] = nums[minIndex];
		nums[minIndex] = temp;
	}
	return nums;
}

疑惑探究
 疑惑1:双循环的理解
 探究1:外层循环控制总共需要跑的趟数,n个元素需要n-1趟,和冒泡排序相同,循环条件:

	for(let i=0;i<n-1;i++){}

  内层循环控制剩下未排序元素的遍历,已经排过序的不用在排序。每次开始的元素是逐渐往后的,所以内层循环的j=i,又因为自己不用和自己比较,j=i+1。

	for(let j=i+1;j<n;j++){}

  疑惑2:交换方式

	temp = nums[i];
	nums[i] = nums[minIndex];
	nums[minIndex] = temp;

  探究2:和冒泡排序不同,这个交换在外层循环的时候进行交换,而不是和冒泡排序一样每次内层循环判断都要交换。
    从这个交换方式可以看出,每次交换是循环开始的元素与选择出来最小或最大的元素交换,也就是说每次交换之后都会把选择出来的元素放到前面排序好元素的后面。


简要概括
  选择排序的理解更直接,就是选出最小的或最大的元素放到排序元素的后面,然后再从剩下未排序的元素继续选择。与冒泡排序有相同之处,也有不同之处,需要好好分析和理解,否则就会搞混淆。

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值