先来看知识点:
选择排序是一组无序的数,先使用第一个和后面所有的进行比较,如果有那个小就交换位置放在前面,依次使用第二个和后面所有的进行比较...
可以用一个例子看一下怎么使用选择排序:
1、排序:var arr = [7,2,4,0,3,1,9]?
var arr = [7,2,4,0,3,1,9]
//我们可以说一下思路,在这里可以利用循环嵌套的规则:“外层执行一次,内层执行一轮”,我们肯定是会用到遍历的,这个规则上我们可以打印试试 i 和 j,发现规律:当i执行一次,j执行一轮,因此使用i和j依次进行比较是合理的。
//遍历
for(var i=0; i<arr.length-1; i++){
// 问题:j每一次都会从头进行执行,那么i和j进行比较的时候会出现回头比较的情况,因此j=i+1
//遍历
for(var j=i+1; j<arr.length; j++){
//判断
if(arr[i]>arr[j]){
//交换
var temp
temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
}
}
}
console.log(arr)
2、选择排序封装的思路与我们的冒泡排序封装思路大差不差,大家可以试着封装一下。
3、练习:数组去重
var arr = ['a', 'a', 'a', 'b','a', 'c', 'b', 'c', 'f', 'g', 'f']
//遍历i
for(var i=0; i<arr.length-1; i++){
//遍历j
for(var j=i+1; j<arr.length; j++){
//判断
if(arr[i] == arr[j]){
arr.splice(j, 1)
//j--的原因是因为会出现连续三个或者三个以上的字符,删除不掉
/* 当有多个连续的字符的时候,在删除当前字符的时候,后面的会进行补位操作(这个时候进行补位的元素和前面被删除的元素是一样的),由于前面已经比较过了,因此程序不会回过头再进行比较一次,所以产生了多个连续字符删不掉的问题 */
j--
}
}
}
console.log(arr)