交换排序(冒泡排序和快速排序)

1.冒泡排序在冒泡排序中,第 1 轮需要比较 n -1 次,第 2 轮需要比较 n -2 次……第 n -1 轮需要比较 1 次。因此,总的比较次数为 (n -1) +(n -2) +…+1 ≈ n^2/2。这个比较次数恒定为该数值,和输入数据的排列顺序无关。
//从左到右冒泡,大数右移,排好序的元素在右边
var arr=[1,3,4,5,2,7,9];
for(var i=0;i<arr.length;i++){
    for(var j=0;j<arr.length-1-i;j++){//这里比较n-1次,然后n-2,最后0
        if(arr[j]>arr[j+1]){
            var temp=arr[j+1];
            arr[j+1]=arr[j];
            arr[j]=temp;
        }
    }
}
初始i=0,不管最大的数在哪个位置,都需要各相邻数之间两两比较n-1次,才能把最大的数送到右边去,未排好序的元素则剩下从左往右数n-1个,则需要两两比较n-2次,循环往复,直到最后比较次数为0
2.快速排序:快速排序算法首先会在序列中随机选择一个基准值(pivot),然后将除了基准值以外的数分为“比基准值小的数”和“比基准值大的数”这两个类别,再将其排列成以下形式。
function MySort( arr ) {
    // write code here
    if(arr.length<=1){
        return arr;
    }//如果数组的长度小于1,则不用排序直接返回
    var index=Math.floor(arr.length/2);//取中位数索引
    var left=[];//构建左边的空数组
    var right=[];//构建右边的空数组
    var middum=arr.splice(index,1)[0];//返回中位数索引的数值
    for(var i=0;i<arr.length;i++){
        if(arr[i]<middum){
            left.push(arr[i]);
        }else{
            right.push(arr[i]);
        }
    }
    return MySort(left).concat(middum,MySort(right));//一个递归药到病除
}
 




全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 14:00
林子大了什么鸟都有啊,我觉得我说的已经很客气了,阴阳谁呢
牛客62656195...:应该不是阴阳吧?你第一次注册的时候boss就说你是牛人
点赞 评论 收藏
分享
叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
06-17 21:57
门头沟学院 Java
白友:噗嗤,我发现有些人事就爱发这些,明明已读不回就行了,就是要恶心人
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务