数据结构之排序算法(一)

时间复杂度为 0(n*n)

 //选择排序算法的实现

// 主要思想是  从第i个开始  逐一与 n-i 个比较 这样一趟循环下来  第一个就是最大(最小)值
    function selectSort(arr) {
        var len = arr.length;
        for(var i=0; i<len-1; i++)
            for(var j=i+1; j<len; j++)
                if(arr[i] > arr[j]){
                    var temp = arr[i];
                    arr[i] =arr[j]
                    arr[j] = temp
                }
            
        return arr;
    }

//插入排序

// 算法思想是  从第i个开始  每次去 i-1 到 0 个一次比较  谁大谁小  保证0-i  是有序
    function insertSort(arr){
        var len = arr.length;
        for(var i=1; i<len; i++) {
            for(var j=i; j>0; j--)
                if(arr[j] <arr[j-1]){
                    var temp = arr[j];
                    arr[j] = arr[j-1]
                    arr[j-1] = temp
                } else{
                    break;
                }
        }
        return arr;
    }
    //改进的插入排序算法
    // 是小于当前值 则往后移一位  
    //  else 时  则直接插入
    function changeInsertSort(arr) {
        var len = arr.length;
        for(var i=1; i<len; i++) {
            var x = arr[i];
            console.log(x)
            var j;
            for(j=i; j>0; j--){
                if(x < arr[j-1]) {
                    arr[j] = arr[j-1]
                } else{
                    break;
                }
            }
            arr[j] = x
        }
        return arr;
    }

    // 冒泡算法的实现

// 相邻两个元素比较 得出最大值  然后i+1  再相邻的比较  一趟下来  最后一个元素就是最大值了
    function maopaoSort(arr) {
        var len = arr.length;
        for(var i=1; i<len; i++)
            for(var j=0; j<len-i; j++) {
                if(arr[j] > arr[j+1]){
                    var temp = arr[j];
                    arr[j] = arr[j+1]
                    arr[j+1] = temp
                }
            }
        return arr;
    }

    // 冒泡算法的改进

//由于之前的冒泡算法是 每次符合条件每次都交换,但是这样的交换其实是多余的,只需记录好最大值的下标号,当一次循环结束时  直接与最后一个元素交换
    function changeMaoPaoSort(arr) {
        var len = arr.length;
        for(var i=1; i<len; i++) {
            var max = 0;
            for(var j=0; j<len-i; j++) {
                if(arr[max] < arr[j+1]){
                    max = j+1
                }
            }
            if(max != len-i){
                var temp = arr[max];
                arr[max] = arr[len-i];
                arr[len-i] = temp;
            }
        }
            
            
        return arr;
    }

综上

        在o(n*n)的时间复杂度的排序算法中,改进的插入排序的效果是最好的。

猜你喜欢

转载自blog.csdn.net/qq_39081958/article/details/81669263