JavaScript实现选择排序及其优化

Posted 十九万里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript实现选择排序及其优化相关的知识,希望对你有一定的参考价值。

选择排序基本思想:每一趟从待排序的数据元素中选择最小(或最大)的元素作为首元素 直到所有元素排完为止。

名词解释:

时间复杂度:时间复杂度是指一个算法执行所耗费的时间
空间复杂度:是指运行完一个程序所需要内存的大小
稳定性:如果a=b a在b的前面,排序后a仍然在b的前面
不稳定性:如果a=b a在b的前面 ,排序之后可能会发生位置变化

选择排序:
平均时间复杂度O(nn)
最好情况O(n
n)
最差情况O(n*n)
空间复杂度O(1)
稳定性:不稳定

在算法实现的时候,每一趟确定最小元素的时候都会通过不断比较交换来使得首位置的当前为最小,每次交换都比较耗费时间,分析后发现 在没有确定最小的元素的时候,这些就艾欧换都是没意义的,要背最后一次交换去覆盖了。所以我们需要设置一个最小值min,每次比较仅存最小元素的数组下标,当每次循环结束之后,把这个最小下标的元素释放出来在进行交换,这样叫交换的次数大大减少。
基础实现:

function func(arr){
                for(var i = 0; i <arr.length;i++){
                    var mun = i
                    for(var j = i; j < arr.length; j++){
                        if(arr[j] < arr[mun]){
                            mun = j
                        }
                    }
                    var temp = arr[mun]
                    arr[mun] = arr[i]
                    arr[i] = temp
                }
                return arr
            }

优化代码实现:

// 排序算法
function selectSort(array) {
    let length = array.length;
    // 如果不是数组或者数组长度小于1,直接放回
    if(!Array.isArray(array) || length<=1)return;
    for (let i =0; i<length -1; i++){
        let minIndex = i ;//设置当前循环为最小元素索引
        for (let j= i+1;j< length ; j++){
            //如果当前元素比最小元素索引小,则更新最小元素索引
            if(array[minIndex] > array[j]){
                minIndex = j;
            }
            //交换最小元素到当前位置
               // [array[i], array[minIndex]] = [array[minIndex], array[i]];
            swap(array, i, minIndex);
        }
        return array;
    }
    // 交换数组中两个元素中的位置
    function swap(array ,left,right){
        var temp = array[left];
        array[left]=array[right];
        array[right] = temp;
    }


}

这里采用了swap方法:(交换值的方法)
可以参考这篇文章:swap使用

以上是关于JavaScript实现选择排序及其优化的主要内容,如果未能解决你的问题,请参考以下文章

排序算法 | 谈选择排序及其优化

[ 数据结构 -- 手撕排序算法第五篇 ] 快速排序 <包含hoare法,挖坑法,前后指针法> 及其算法优化

快速排序中的partition函数的枢纽元选择,代码细节,以及其标准实现

数据结构之八大排序算法(C语言实现)

排序算法入门之冒泡排序及其优化(java实现)

快速排序及其优化