javascript基本排序算法实现

快速排序

 1 //快速排序思想
 2 //
 3 // (1)在数据集之中,选择一个元素作为"基准"(pivot)。
 4 // (2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。
 5 // (3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
 6 
 7 
 8 function quickSort(array) {
 9     //判断是不是数组
10     if (Array.isArray(array)) { //
11         //判断数组长度
12         //作用一:如果传入的数组为空数组或是只有一个长度,直接返回
13         //
14         //递归运算  最后返回返回的left right长度为一时的退出条件  终止循环
15         if (array.length <= 1) {
16             return array;
17         }
18         //尽可能的取数组中间的值
19         var pivotIndex = Math.floor(array.length / 2);
20         var pivot = array.splice(pivotIndex, 1)[0];
21 
22         //分别定义左右两个数组
23         var left=[],
24             right=[];
25 
26         for(var i=0; i<array.length; i++){
27             if(array[i]<=pivot){
28                 left.push(array[i])
29             }else{
30                 right.push(array[i])
31             }
32         }
33 
34         //拼接数组
35         //递归运算
36         return quickSort(left).concat([pivot], quickSort(right));
37 
38     }else{
39         console.log("请传入数组")
40     }
41 }
42 
43 
44 console.log(quickSort([12,32,3,5,32,8,24,1]))

冒泡排序

//冒泡排序
//实现思路
//比较数组相邻元素的大小
//从小到大排序   对调两个元素的位置

function bubbleSort(array){
    //第一步判断是不是数组
    if(Array.isArray(array)){
        var temp,i,j,
            len=array.length;

        for(i=0; i<len; i++){
            for(j=0; j<len; j++){
                if(array[i]<array[j]){
                    temp=array[i];
                    array[i]=array[j];
                    array[j]=temp;
                }
            }
        }
        return array;
    }
}


console.log(bubbleSort([12,32,3,5,32,8,24,1]))

 

插入排序

//插入排序

function insertSort(array) {
    if (Array.isArray(array)) {
        //假设第0个元素是一个有序的数列,第1个以后的是无序的序列,
        //所以从第1个元素开始将无序数列的元素插入到有序数列中
        for (var i = 1; i < array.length; i++) {
            //升序
            if (array[i] < array[i - 1]) {
                //取出无序数列中的第i个作为被插入元素
                var guard = array[i];
                //记住有序数列的最后一个位置,并且将有序数列位置扩大一个
                var j = i - 1;
                array[i] = array[j];

                //比大小,找到被插入元素所在的位置
                while (j >= 0 && guard < array[j]) {
                    array[j + 1] = array[j];
                    j--;
                }

                //插入
                array[j + 1] = guard;
            }
        }
        return array
    }else{
        console.log("非数组")
    }
}



console.log(insertSort([12,32,3,5,32,8,24,1]))

 

posted on 2016-04-20 19:35  风不息、  阅读(151)  评论(0编辑  收藏  举报

导航