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;
}

 

 

 

堆排序

归并排序

posted @ 2012-06-16 16:25  我是小菜鸟  阅读(260)  评论(0编辑  收藏  举报