选择排序
选择排序的思路就时循环比较数组里的元素,找出最小的值将其放在首位,然后依次遍历后面的元素继续寻找最小值放在第二位
实现的思路: 定义一个函数,函数接受一个数组,函数中计算出数组的长度用来遍历时使用,定义一个新数组用来放置排序后的元素,两层for循环,外层for循环作用是从第一个元素到最后一个元素依次拿出来假设为最小值进行比较,在第一次外层循环时,内层循环将它与第二个元素开始依次往后进行比较 ,当找到第一个比它小的将其设为当前最小值,在与后面的进行比较直至第一次完全遍历以便数组找出最小值,然后将这个最小值位置的元素替换为 array[i] 中的值
function SelectSort(Array) {
const n = Array.length
console.log('length:' + n)
let newArray = []
for(let i = 0; i < n; i++){
let minIndex = i
for(let j = i + 1; j < n; j++) {
if(Array[j] < Array[minIndex]){
minIndex = j
}
}
newArray.push(Array.splice(minIndex,1,Array[i])[0])
}
return newArray
}
- 实现可自定义查找方式的方法和可选择的从大到小或从小到大排列
// 上面的排序不具备自定义顺序排序,思考提出一个函数用来让使用者决定 “排序”的定义,是从大到小还是从小到大
function findValue(array, operator = '<') {
let Index = 0
if(operator === '>'){
array.forEach((e, i) => {
if (e > array[Index]) {
Index = i
}
})
return Index
}
array.forEach((e, i) => {
if (e < array[Index]) {
Index = i
}
})
return Index
}
function SelectSort_2(array, operator = '<' ,fn = findValue) {
let newArray = []
let length = array.length
for (let i = 0; i< length; i++) {
let index = fn(array,operator)
console.log(index)
newArray.push(array[index])
array.splice(index, 1)
}
return newArray
}