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

    冒泡排序(Bubble Sort)

    具体算法思路描述如下:

    • <1>.比较相邻的元素。如果第一个比第二个大,就交换它们两个;
    • <2>.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
    • <3>.针对所有的元素重复以上的步骤,除了最后一个;
    • <4>.重复步骤1~3,直到排序完成。
    function Sort(arr) {var i = arr.length-1;  //初始位置
        while ( i> 0) {
            var pos= 0; //每趟开始时,无记录交换
            for (var j= 0; j< i; j++)
               if(arr[j]> arr[j+1]) {
                  pos= j; //记录交换的位置
                var tmp = arr[j]; 
               arr[j]=arr[j+1];
              arr[j+1]=tmp; } i= pos; //为下一趟排序作准备 }
        return arr; }

    选择排序(Selection Sort)

    算法描述和实现

    n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:

    • <1>.初始状态:无序区为R[1..n],有序区为空;
    • <2>.第i趟排序(i=1,2,3...n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序 从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;
    • <3>.n-1趟结束,数组有序化了。
    function Sort2(arr) {
        var len = arr.length;
        var minIndex, temp;for (var i = 0; i < len - 1; i++) {
            minIndex = i;
            for (var j = i + 1; j < len; j++) {
                if (arr[j] < arr[minIndex]) {     //寻找最小的数
                    minIndex = j;                 //将最小数的索引保存
                }
            }
            temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }return arr;
    }
    var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];   
    Sort2(arr)

    归并排序(Merge Sort)

    算法描述和实现

    具体算法描述如下:

    • <1>.把长度为n的输入序列分成两个长度为n/2的子序列;
    • <2>.对这两个子序列分别采用归并排序;
    • <3>.将两个排序好的子序列合并成一个最终的排序序列。
    function Sort3(arr) {  //采用自上而下的递归方法
        var len = arr.length;
        if(len < 2) {
            return arr;
        }
        var middle = Math.floor(len / 2),
            left = arr.slice(0, middle),
            right = arr.slice(middle);
        return merge(Sor3t(left), Sort3(right));
    }
    
    function merge(left, right){
        var result = [];
        while (left.length && right.length) {
            if (left[0] <= right[0]) {
                result.push(left.shift());
            } else {
                result.push(right.shift());
            }
        }
        while (left.length)
            result.push(left.shift());
        while (right.length)
            result.push(right.shift());
        return result;
    }
    var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
    Sort3(arr);

  • 相关阅读:
    celery异步任务
    redis过期策略与内存淘汰机制分析
    爬虫数据去重-布隆过滤器
    scrapy-redis数据去重与分布式框架
    redis哨兵机制
    C#从零单排上王者系列---元组
    玩转VSCode插件之Remote-SSH
    C#从零单排上王者系列---数据类型
    Cassandra之Docker环境实践
    centos7安装nginx并配置前端环境
  • 原文地址:https://www.cnblogs.com/maomao93/p/10219983.html
Copyright © 2011-2022 走看看