【WEB】JS实现选择排序,插入排序与归并排序

本文介绍了三种基本排序算法:选择排序、插入排序和归并排序。详细解释了每种算法的实现原理及步骤,并提供了JavaScript实现代码。选择排序适用于简单场景,算法复杂度为O(n^2),但不稳定;插入排序适合部分有序数组,也是O(n^2),但稳定;归并排序通过分治法实现,复杂度为O(n log n),稳定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.选择排序

算法思路:它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
选择排序是不稳定的排序方法。算法复杂度为O(n^2)
JS实现
这里写图片描述

function random(from,to,n){
            var arr=[];
            for(var i=0;i<n;i++){
                var s=parseInt(Math.random()*(to-from))+from;
                arr.push(s);
            }
            return arr;
        }

        function chooseSort(arr,n){
            for(var i=0;i<n;i++){
                var minIndex=i;
                for(var j=i;j<arr.length;j++){
                        if(arr[j]<arr[minIndex]){
                            minIndex=j;
                        }
                }
                arr=swap(arr,i,minIndex);

            }
            return arr;
        }

        function swap(arr,a,b){

            var temp=arr[a];
            arr[a]=arr[b];
            arr[b]=temp;
            return arr;
        }

        (function(){
            var arr=random(0,1000,20);
            console.log(arr);
            var result=chooseSort(arr,20);
            console.log(result);

        })();

2.插入排序
算法思路:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
时间复杂度为O(n^2)。是稳定的排序方法
插入排序在用于几乎有顺序的数组时,效率甚至比归并算法要高。
这里写图片描述
JS实现:

function random(from,to,n){
            var arr=[];
            for(var i=0;i<n;i++){
                var s=parseInt(Math.random()*(to-from))+from;
                arr.push(s);
            }
            return arr;
        }

        function insertSort(arr,n){
            for(var i=1;i<n;i++){
                var target=arr[i];
                var index=i;//这里的j是元素待插入的位置
                for(var j=i;j>0&&target<arr[j-1];j--){//在这里对代码进行了优化,当待插入的元素比已经排好序的最后一个元素数值都大,那就无需在执行一下操作。
                        arr[j]=arr[j-1];
                    }
                    arr[j]=target;
            }
            return arr;
        }



        (function(){
            var arr=random(0,10,5);
            console.log(arr);
            var result=insertSort(arr,5);
            console.log(result);

        })();

3.归并排序

算法思想:该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
这里写图片描述
算法复杂度为O(n)
JS实现:

var array=[];
        function random(from,to,n){
            var arr=[];
            for(var i=0;i<n;i++){
                var s=parseInt(Math.random()*(to-from))+from;
                arr.push(s);
            }
            return arr;
        }
        function merge(arr,l,mid,r){
            var aux=[];
            for(var i=l;i<=r;i++){
                aux.push(arr[i]);
            }
            var i=l,j=mid+1;
            for(var k=l;k<=r;k++){
                if(i>mid){
                    arr[k]=aux[j-l];
                    j++;
                }else if(j>r){
                    arr[k]=aux[i-l];
                    i++;
                }else if(aux[i-l]<=aux[j-l]){
                    arr[k]=aux[i-l];
                    i++;
                }else if(aux[i-l]>aux[j-l]){
                    arr[k]=aux[j-l];
                    j++;
                }
            }
            console.log(arr);
        }

        function mergeSort(arr,l,r){

            if(l>=r){
                return
            }
            var mid=parseInt(1/2*(l+r));
            mergeSort(arr,l,mid);
            mergeSort(arr,mid+1,r);
            merge(arr,l,mid,r);
        }

        function swap(arr,a,b){

            var temp=arr[a];
            arr[a]=arr[b];
            arr[b]=temp;
            return arr;
        }

        (function(){
            array=random(0,100,20);
            console.log(array);
            var result=mergeSort(array,0,19);
            console.log(array);

        })();

4.其他排序
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值