js——算法等

1、快速排序
var arr = [23,56,345,25,4,235,45,67,25,44,56,6,333,4];

var quickSort = function(arr){
    if(arr.length <= 1){
        return arr;
    }
    var i = Math.floor((arr.length-1)/2);
    var arrLeft = [];
    var arrRight = [];
    //var pivot = arr.splice(i, 1);
    for(var a in arr){
        if(i == a){
            continue;
        }
        if(arr[a] <= arr[i]){
            arrLeft.push(arr[a]);
        }else{
            arrRight.push(arr[a]);
        }
    }
    /*arrLeft = quickSort(arrLeft);
    arrRight = quickSort(arrRight);*/
    return quickSort(arrLeft).concat(arr[i],quickSort(arrRight));
};


//O(n2),O(n2) O(1) 不稳定 冒泡
function bubbleSort(arr){
    var num = 1;
    for(var i=0;i<arr.length;i++){
        for(var j=0;j<arr.length-i-1;j++){
            num +=1;
            if(arr[j]>arr[j+1]){
                var tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
            }
        }
    }
    console.log(num,arr.length);//56 11
    return arr;
}

//选择排序
function selectionSort(arr){
    var num = 1;
    var len = arr.length;
    for(var i=0;i<len-1;i++){
        var numIndex = i;
        for(var j=i+1;j<len;j++){
            num +=1;
            if(arr[j]<arr[numIndex]){
                numIndex = j;
            }
        }
        if(i != numIndex){
             var tmp = arr[numIndex];
             arr[numIndex] = arr[i];
             arr[i] = tmp;
        }

    }
    console.log(num,arr.length);//56 11
    return arr
}

//插入
function insertionSort(arr) {
    var len = arr.length;
    var num = 1;
    for(var i=0;i<len;i++){
        var preIndex = i-1;
        var current = arr[i];
        while(preIndex>=0 && arr[preIndex]>current){
            arr[preIndex+1] = arr[preIndex];
            preIndex--;
            num++;
        }
        arr[preIndex+1] = current;
    }
    console.log(num,arr.length);//24 11
    return arr;
}

/*希尔排序*/
function shellSort(arr) {
    var len =arr.length;
    var num = 1;
    gap = Math.floor(len/2);
    console.log("gap:"+gap);
    while(gap!==0){
        for(var i = gap;i<len;i++){
            var temp = arr[i];
            //console.log("temp:"+temp);
            var j;
            for(j=i-gap;j>=0 && temp<arr[j];j-=gap){
                num += 1;
                arr[j+gap] = arr[j];
            }
            arr[j+gap] = temp;
        }
        gap=Math.floor(gap/2);
    }
    console.log(num,arr.length);//12 11
    return arr;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Ba la la la ~ 读者朋友们,你们好啊,又到了冷锋时间,话不多说,发车! 1.冒泡排序(Bub...
    王饱饱阅读 1,809评论 0 7
  • 排序算法说明 (1)排序的定义:对一序列对象根据某个关键字进行排序; 输入:n个数:a1,a2,a3,…,an输出...
    BULL_DEBUG阅读 796评论 0 3
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,742评论 0 15
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,214评论 0 52
  • 001 内在品质 一个人的成功并非偶然,时机和天赋固然重要,但通过后天努力培养的内在品质对于成就大业更加重要。 ...
    问石阅读 282评论 5 6