算法--排序

冒泡排序(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);

原文地址:https://www.cnblogs.com/maomao93/p/10219983.html