zoukankan      html  css  js  c++  java
  • Javascript版本排序1

    冒泡排序-时间复杂度为O(N^2)-稳定排序:

    var a = [49 ,38, 65 ,97 ,76 ,13 ,27, 49];
    var length = a.length;
    var temp;
    for(var i = 0; i < a.length; i++) {
       for(var j = 0; j < a.length - i; j++) {
    		if(a[j] > a[j + 1]) {
    			temp = a[j];
    			a[j] = a[j + 1];
    			a[j + 1] = temp;
    		}
    	}
    }
    console.log(a.join(" "));

    选择排序-时间复杂度为O(N^2)-不稳定排序:  每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
        初始关键字     [49 38 65 97 76 13 27 49]
        第一趟排序后 13 [38 65 97 76 49 27 49]
        第二趟排序后 13 27 [65 97 76 49 38 49]
        第三趟排序后 13 27 38 [97 76 49 65 49]
        第四趟排序后 13 27 38 49 [76 97 65 49]
        第五趟排序后 13 27 38 49 49 [97 65 76]
        第六趟排序后 13 27 38 49 49 65 [97 76]
        第七趟排序后 13 27 38 49 49 65 76 [97]
        最后排序结果 13 27 38 49 49 65 76 97

    var a = [49 ,38, 65 ,97 ,76 ,13 ,27, 49];
    var minV, indexM, temp, index = a.length;
    for(var i = 0; i < index; i++) {
    minV = a[i];
    indexM = i;
        for(var j = i; j <  index; j++) {
            if(a[j] < minV) {
                minV = a[j];
                indexM = j;
            }
        }
        temp = a[indexM];
        a[indexM] = a[i];
        a[i] = temp;
    }
    console.log(a.join(" "));

    插入排序--时间复杂度为O(N^2)-稳定的排序方法: 有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序.
        LOG: 1 time: 38 49 65 97 76 13 27 49
        LOG: 2 time: 38 49 65 97 76 13 27 49
        LOG: 3 time: 38 49 65 97 76 13 27 49
        LOG: 4 time: 38 49 65 76 97 13 27 49
        LOG: 5 time: 13 38 49 65 76 97 27 49
        LOG: 6 time: 13 27 38 49 65 76 97 49
        LOG: 7 time: 13 27 38 49 49 65 76 97

    var a = [49 ,38, 65 ,97 ,76 ,13 ,27, 49];
    var length = a.length;
    var temp;
    for(var i = 1; i < a.length; i++) {
        var j = i;
        var currentData = a[i];
        while((j > 0) && (a[j - 1] > currentData)) {
            a[j] = a[j - 1];
            j--;
        }
        a[j] = currentData;
    }
    console.log(a.join(" "));
    

    快速排序:  通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列,不稳定的排序方法
        1 time: 27 38 13 49 76 97 65 49
        2 time: 13 27 38 49 76 97 65 49
        3 time: 13 27 38 49 49 65 76 97
        4 time: 13 27 38 49 49 65 76 97

    function QuickSort(data, left, right) {
        var temp = data[left], p = left, i = left, j = right, temp1;
        while(i < j) {
            while(j >= p && data[j] >= temp) {
                j--;
            }
            if(j >= p) {
                temp1 = data[p];
                data[p] = data[j];
                data[j] = temp1;
                p = j;
            }
            while(i < p && data[i] <= temp) {
                i++;
            }
            if(i <= p) {
                temp1 = data[p];
                data[p] = data[i];
                data[i] = temp1;
                p = i;
            }
        }
        if(p - left > 1) QuickSort(data, left, p - 1);
        if(right - p > 1) QuickSort(data, p + 1, right);
    }
    var a = [49 ,38, 65 ,97 ,76 ,13 ,27, 49], k = 1;
    QuickSort(a, 0, a.length - 1);
    console.log(a);
    

    希尔排序:属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序,不稳定排序

    image
    var a = [49 ,38, 65 ,97 ,76 ,13 ,27, 49];
    var n = a.length;
    var temp, gap = 0;
    while(gap < n) {
        gap = gap * 3 + 1;
    }
    while(gap > 0) {
        for(i = gap; i < n; i++) {
            j = i - gap;
            temp = a[i];
            while((j >= 0) && (a[j] > temp)) {
                a[j + gap] = a[j];
                j = j - gap;
            }
            a[j + gap] = temp;
        }
        gap = (gap - 1)/3;
    }

    堆排序

    归并排序

    路慢慢其休远羲,吾将上下而求所
  • 相关阅读:
    0x02 枚举、模拟、递推
    0x01 位运算
    bzoj3529: [Sdoi2014]数表
    bzoj5216: [Lydsy2017省队十连测]公路建设
    POJ1789Truck History
    最小生成树模板
    POJ1258Agri-Net
    POJ1860Currency Exchange(SPFA)
    POJ3083Children of the Candy Corn
    POJ2503Babelfish
  • 原文地址:https://www.cnblogs.com/garinzhang/p/2551929.html
Copyright © 2011-2022 走看看