zoukankan      html  css  js  c++  java
  • 排序算法 JavaScript

        //冒泡排序
        sort(elements){
            for (let i = 0; i < elements.length - 1; i++){
                for(let j = 0; j < elements.length - 1 - i; j++){
                    if(elements[j] < elements[j + 1]){
                        let temp = elements[j];
                        elements[j] = elements[j + 1];
                        elements[j + 1] = temp;
                    }
                }
            }
            console.log(elements);
        }
        //快速排序
        quickSort(elements){
            if (elements.length <= 1 ){
                return elements;
            }
            var mid = Math.floor(elements.length / 2);
            var val = elements[mid];
        
            var left = [];
            var right = [];
            for (let i = 0; i <elements.length; i++){
                if (elements[i] > val){
                    right.push(elements[i]);
                }else if(elements[i] < val){
                    left.push(elements[i]);
                }
            }
            // concat() 方法用于连接两个或多个数组。此方法返回一个新数组,不改变原来的数组。
            // arrayObject.concat(array1,array2,...,arrayN)
            return this.quickSort(left).conact([val], this.quickSort(right));
        }
    
    
        //快速排序  
        quick_sort(s, start , end )  
        {  
            if (start < end)  
            {  
                //Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1  
                var i = start , j = end , x = s[start];  
                while (i < j)  
                {  
                    while(i < j && s[j] >= x) // 从右向左找第一个小于x的数  
                        j--;    
                    if(i < j)   
                        s[i++] = s[j];  
                    
                    while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数  
                        i++;    
                    if(i < j)   
                        s[j--] = s[i];  
                }  
                s[i] = x;  
                this.quick_sort(s, start, i - 1); // 递归调用   
                this.quick_sort(s, i + 1, end );  
            }  
        }  
        //插入排序
        insertSort(element){
            for (let i = 1; i < element.length; i++){
                // 如果i的值比i-1大,那就不需要排序了
                if (element[i] < element[i - 1]){
                    let startJ = i - 1;
                    let keyVal = element[i];
        
                    //由于keyVal小于element[startJ],那么把关键字element[startJ]往后移动一个位置
                    while (startJ >= 0 && keyVal < element[startJ]){
                        element[startJ + 1] = element[startJ];
                        startJ--;
                    }
                    element[startJ + 1] = keyVal;
                }
            }
        }
    
        //哈希排序
        shellSort(elements)
        {
            if (elements.length==0)
            {
                return;
            }
            let len = elements.length;
            let step =  Math.floor(elements.length/2); 
            while(step>0)
            {
    
                for (let i= step;i<elements.length;i++){
                    let j = i;
                    while(j >= step && elements[j] < elements[j-step])
                    {
                        var temp = elements[j];
                        elements[j] = elements[j-step];
                        elements[j-step] = temp;
                        j -=step;
                    }
                }
                step=Math.floor(step/2);
            }
        }
  • 相关阅读:
    Qbxt 模拟题 day2(am) T2 jian
    Codevs 1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组
    洛谷比赛 U5442 买(最长链)
    洛谷 P1800 software_NOI导刊2010提高(06)(二分答案+DP检验)
    Codevs 4373 窗口(线段树 单调队列 st表)
    P1453 城市环路
    P1841 [JSOI2007]重要的城市
    P1410 子序列
    H
    GSS4 D
  • 原文地址:https://www.cnblogs.com/suneil/p/11291292.html
Copyright © 2011-2022 走看看