zoukankan      html  css  js  c++  java
  • 选择排序直接选择排序和堆排序

    选择排序:基本思想是依次从待排序中选择出关键字值最小的记录、关键字值次之的记录……,并分别将它们定位到序列左侧的第一个位置、第二个位置……,从而使待排序的记录序列成为按关键字值由小到大排列的有序序列。

    直接选择排序:从第i个无序列表arr[i...n]中,选择关键字值最小的记录将其插入有序列表的末尾arr[n-i+1],交换一次位置。

    function selectionSort(arr){
        var n = arr.length;
        for(var i = 0; i<n-1; i++){
            var tmp = i;
            for(var j = i+1; j <n;j++){
                if(arr[tmp]>arr[j]){
                    tmp = j;
                }
            }
            var tmpnum = arr[tmp];
            arr[tmp] = arr[i];
            arr[i] = tmpnum;
        }
        return arr;
    }
                
    var arr = [51,33,62,96,87,17,28,51];
                
    selectionSort(arr);

    直接选择排序的平均时间复杂度O(n2),是不稳定排序。

    堆排序:满足完全二叉树特性,其坐、右子树分别是堆,任何一个结点的值不大于或不小于左/右孩子结点的值。
    堆排序分别称小顶堆、大顶堆。

    function sift(arr,p,len){
        var tmp = arr[p];
        var c = 2*p+1;
        while(c<len){
            if(c+1<len && arr[c] <arr[c+1]){
                c++;
            }
            if(tmp>=arr[c]){
                break;
            }
            arr[p] = arr[c];
            p = c;
            c = 2*p+1;
        }
        arr[p] = tmp;
    }
                
    function heapsort(arr){
        for(var i = parseInt(arr.length/2)-1;i>=0;i--){
            sift(arr,i,arr.length);
        }          
        for(var i= arr.length-1;i>0;i--){
            var tmp = arr[0];
            arr[0] = arr[i];
            arr[i]= tmp;
            sift(arr,0,i);
        }
    }
                
    var arr = [51,33,62,96,87,17,28,51];
    heapsort(arr);
    console.log("小顶堆:"+arr);

    堆排序的时间复杂度O(nlog2n),是不稳定排序。

  • 相关阅读:
    (转载) 天梯赛 L2-018. 多项式A除以B
    天梯赛 L2-007. (并查集) 家庭房产
    天梯赛 L2-013. (并查集) 红色警报
    天梯赛 L2-002. (模拟) 链表去重
    28. Implement strStr() (C++)
    27. Remove Element(C++)
    26. Remove Duplicates from Sorted Array(C++)
    19. Remove Nth Node From End of List(C++)
    21. Merge Two Sorted Lists(C++)
    20. Valid Parentheses(C++)
  • 原文地址:https://www.cnblogs.com/kuikui/p/2859013.html
Copyright © 2011-2022 走看看