排序算法 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);
        }
    }

 

posted @ 2019-08-02 21:23  suneil  阅读(197)  评论(0编辑  收藏  举报