美文网首页
js 排序算法 2021-07-13

js 排序算法 2021-07-13

作者: simok | 来源:发表于2021-07-13 18:23 被阅读0次

minof2 两个值中的最小值

求两个数最小值
let minof2 = ([a,b]) => a < b ? a : b;
minof2([8,4]);

求三个数最小值
let minof3 = ([a,b,c]) => {
return minof2([a,minof2([b,c])])
};
minof3([3,4,6]);

推理 求四个数
let minof4 = ([a,b,c,d]) => {
return minof2([a,minof3([b,c,d])])
};

minof4([5,2,3,4]);


求任意长度的最小值

let min = (numbers) => {
if (numbers.length > 2){
   return min([numbers[0],min(numbers.slice(1))])
}else{
return Math.min.apply(null,numbers)
}
}

min([9,4,3,1]);

步骤:
min(9,min([4,3,1])) = min(9,min(4,min(3,1))) 
= min(9,min(4,Math.min.apply(null,[3,1]))) 
= min(9,min(4,1))
= min(9,1)
=Math.min.apply(null,[9,1])=1

析构赋值


image.png
image.png

三个 数的最小值

image.png

求任意长度的最小值

image.png

实现sort排序




let sort2 = ([a,b]) => a < b ? [a,b] : [b,a];

let min = (numbers) => {
if (numbers.length > 2){
   return min([numbers[0],min(numbers.slice(1))])
}else{
return Math.min.apply(null,numbers)
}}

}
let minIndex = (numbers) => numbers.indexOf(min(numbers));

let sort3 = (numbers) => {
let index = minIndex(numbers)
let min = numbers[index]
numbers.splice(index, 1)
return [min].concat(sort2(numbers))
}
sort3([44,3,5]);


let sort = (numbers) => {
if (numbers.length > 2){
let index = minIndex(numbers)
let min = numbers[index]
numbers.splice(index,1)
return [min].concat(sort(numbers))
}else {
return numbers[0] < numbers[1] ? numbers : numbers.reverse()
}
}

sort([55,6,2,8,3]);

步骤
[2].concat(sort([55,6,8,3]))
[2].concat([3].concat(sort([55,6,8])))
[2].concat([3].concat([6].concat(sort([55,8]))))
[2].concat([3].concat([6].concat(sort([55,8]))))
[2].concat([3].concat([6].concat([8,55])]))


优化一下 minIndex

let minIndex = (numbers) => {
    let index = 0;
    for (let i = 1; i < numbers.length; i++) {
        if (numbers[i] < numbers[index]) {
            index = i
        }
    }
    return index

}

image.png

bug 如果有两个相同的最小值 就会有bug


image.png
image.png

任意长度的排序

image.png image.png

选择排序的循环写法

let minIndex = (numbers) => {
    let index = 0;
    for (let i = 1; i < numbers.length; i++) {
        if (numbers[i] < numbers[index]) {
            index = i
        }
    }
    return index
}

//交换数组中两个元素的位置
let swap = (array, i, j) => {
    let tmp = array[i]
    array[i] = array[j]
    array[j] = tmp
    return array
}

swap([1,2,3,4],1,2); 



let sort = (numbers) => {
    for (let i = 0; i < numbers.length - 1; i++) {
        //取最小值下标之后 数组要slice i 个位置
        let index = minIndex(numbers.slice(i)) + i;
     console.log(`index: ${index}`)
       if (index !== i){
        swap(numbers, index, i)
}
    }
}


过程 
[5, 1, 2, 56, 9]

i= 0   index= 1   最小值为 1
    
    [1, 5, 2, 56, 9]


i = 1  index=2    [5, 2, 56, 9]  最小值为2
    [1, 2, 5, 56, 9]

i = 2  index= 2  [5,56,9]

    [1, 2, 5, 56, 9]

i = 3 index = 4
    [1, 2, 5, 9, 56]
image.png

快速排序

image.png image.png image.png

归并排序

image.png image.png image.png image.png image.png

相关文章

  • js 排序算法 2021-07-13

    minof2 两个值中的最小值 析构赋值image.pngimage.png 三个 数的最小值 求任意长度的最小值...

  • 排序算法

    JS里排序算法的写法:

  • JS中可能用得到的全部的排序算法

    本篇有7k+字, 系统梳理了js中排序算法相关的知识, 希望您能喜欢. 原文:JS中可能用得到的全部的排序算法 导...

  • 数组的排序算法的实现

    数组的排序算法 关于排序算法请看这篇文章。本文尝试使用js来实现一部分简单的算法。 选择排序 思路:若要从小到大排...

  • JS算法——排序算法

    一:冒泡排序 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两...

  • 排序算法

    https://www.cnblogs.com/beli/p/6297741.html js十大排序算法:冒泡排序...

  • js排序算法

    冒泡排序 冒泡排序就是用数组中第一个值和所有值进行比较,选出最大的值放到数组最后。下一次遍历的时候就不需遍历最后一...

  • js 排序算法

  • JS排序算法

    冒泡排序: vararray = [{"name":"aa",index:100},{"name":"aa",in...

  • JS排序算法

    冒泡排序 1.依次比较相邻的两个数,如果第一个比第二个小,不变。如果第一个比第二个大,调换顺序。一轮下来,最后一个...

网友评论

      本文标题:js 排序算法 2021-07-13

      本文链接:https://www.haomeiwen.com/subject/gchspltx.html