排序算法总结--JS

来源:互联网 发布:超链接调用js传递参数 编辑:程序博客网 时间:2024/06/09 16:58

交换排序

  • 冒泡排序
    基本思想:比较相邻的元素,前一个大于后面一个就调换位置;从第一对比较到最后一对,最后位置是最大元素。不断重复上述步骤,排序完成。
    平均时间复杂度: O(n^2)
    最优时间复杂的: O(n)
    最差时间复杂度: O(n^2)
function sort_bubble(arr){    var i=0,        j=0;    var num;    for(;i<arr.length;i++){        for(j=i+1;j<arr.length;j++){            if(arr[i]<arr[j]){                num = arr[i];                arr[i] = arr[j];                arr[j] = num;            }        }    }}
  • 快速排序
    基本思想:
    • 从序列中挑出一个元素,作为基准
    • 把所有比基准值小的放在基准前面,所有比基准大的放在基准后面,进行分区
    • 对每个分区递归进行上面步骤,递归结束条件是序列的大小是0或1

平均时间复杂度:O(nlogn)
最差时间复杂度:O(n^2)
最优时间复杂度:O(nlogn)

function partition(arr,left,right){    var temp;    var pivot_num = arr[right];    var tail = left-1;    for(var i= left; i< right; i++){        if(arr[i]<=pivot_num){            ++tail;            temp = arr[tail];            arr[tail] = arr[i];            arr[i] = temp;        }    }    temp = arr[right];    arr[right] = arr[tail+1];    arr[tail+1] = temp;    return tail+1;}function sort_quick(arr,left,right){    if(left>=right)        return ;    var pivot = partition(arr,left,right);    sort_quick(arr,left,pivot-1);    sort_quick(arr,pivot+1,right);}

选择排序

  • 堆排序
    基本思想:
    • 由输入的无序数列构造一个最大堆,作为初始的无序区
    • 把堆顶元素(最大值)和堆尾元素互换
    • 把堆得尺寸缩小1,并调用heapify(A,0)从新的堆顶元素开始进行堆调整
    • 重复步骤2,直到堆尺寸为1