JavaScript中的排序算法(二)

1、选择排序
每一趟从待排序的记录中选出最小的元素,顺序放到已排好序的序列的最后,直到全部序列排序完毕。

<script type="text/javascript">
        function selectionSort(arr){
            for(var i = 0; i < arr.length-1; i++){
                var k = i;
                for(var j = i+1;j < arr.length;j++){
                    if(arr[j]<arr[k]){
                        k=j;
                    }
                }
                if(k != i){
                    var temp =  arr[k];
                    arr[k] = arr[i];
                    arr[i] = temp;
                }
            }
            return arr;
        }
        var array = [10,14,11,5,8,24,45,99];
        document.write("当前数组是:"+'<br>'+array+'<br>');
        document.write("排序后的数组是:"+'<br>'+selectionSort(array));
    </script>

2、快速排序
先从数列中取出一个数作为基准数,分区过程中将比这个数大的全部放到它的右边,小于或等于它的数全部放到它的左边,再对左右区间重复上述步骤,直到各个区间都只有一个数。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <script type="text/javascript">
        function quickSort(array){
            var middle = Math.floor(array.length/2);
            middleNum = array[middle];
            var small = [],
                big = [];
            if(array.length <= 2){
                return array;
            }
            for(var i = 0; i < array.length; i++){
                if(i == middle){
                    continue;
                }
                array[i] > middleNum ? (big[big.length] = array[i]) : (small[small.length] = array[i]);
            }
            small[small.length] = middleNum;
            return quickSort(small).concat(quickSort(big));
        }
        var arr = [10,14,11,5,8,45,24,99];
        document.write("当前数组是:"+'<br>'+arr+'<br>');
        document.write("排序后的数组是:"+'<br>'+quickSort(arr));
    </script>
</body> 
</html>

3、二分插入排序
二分插入排序也称折半插入排序,基本思想是:设数列[0….n]分为两部分一部分是[0…i]为有序序列,另一部分是[i+1…..n]为无序序列,从无序序列中取一个数 x ,利用二分查找算法找到 x 在有序序列中的插入位置并插入,有序序列还是有序的,接下来重复上述步骤,直到无序序列全部插入有序序列 ,这是整个序列只剩下有序序列,即有序了。

<script type="text/javascript">
        function sort(array){
            for(var i = 1; i < array.length; i++){
                var temp = array[i];
                var left = 0,
                    right = i - 1;
                while(left <= right ){
                    var mid = Math.floor((left+right)/2);
                    if(temp > array[mid]){
                        left = mid + 1;
                    }else {
                        right = mid - 1 ;
                    }
                }
                for(j = i - 1 ; j >= left; j--){
                    array[j+1] = array[j];
                }
                array[left] = temp;
            }
            return array;
        }
        var arr = [10,14,11,5,8,45,24,99];
        document.write("当前数组是:"+'<br>'+arr+"<br>");
        document.write("排序后的数组是:"+'<br>'+sort(arr));
    </script>

4、希尔排序
先将序列分成较多个子序列分别进行排序,再分成较少个子序列分别进行排序,直到最后为一个序列排序。

<script type="text/javascript">
        function shellSort(arr){
            var len = arr.length;
            var b = len/2;
            while(b >= 1){
                for(var i = 0; i < b; i++){
                    for(var j = i+b; j < len; j = j+b){
                        var temp = arr[j];
                        var k = j - b;
                        while (k >= i&& temp <arr[k]) {
                            arr[k+b] = arr[k];
                            k = k -b;
                        }
                        arr[k+b] = temp;
                    }
                }
                b = b/2;
            }
            return arr;
        }
        var arr = [10,14,11,5,8,45,24,99];
        document.write("当前数组是:"+'<br>'+arr+'<br>');
        document.write("排序后的数组是:"+'<br>'+shellSort(arr));
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值