js的一些排序方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    
</body>

<script>
// 着重——快速、冒泡、插入

//1、 冒泡排序
var array=[3,56,2,78,1,63];
var temp = 0;
for (var i = 0; i < array.length; i++){
    for (var j = 0; j < array.length - i; j++){
        if (array[j] > array[j + 1]){
            temp = array[j + 1];
            array[j + 1] = array[j];
            array[j] = temp;
        }
    }
}
    console.log(array);//(6) [1, 2, 3, 56, 63, 78]





//2、 sort排序
var arrSimple=new Array(1,8,7,6,2,5);
    arrSimple.sort();
    // document.writeln(arrSimple.join());
    console.log(arrSimple.join()); //1,2,5,6,7,8




//3、 快速排序
function quickSort(arr){  
    if(arr.length<=1){//如果数组只有一个数,就直接返回;  
        return arr;  
    }  
    var num=Math.floor(arr.length/2);//找到中间数的索引值,如果是浮点数,则向下取整  
    var newValue=arr.splice(num,1);//找到中间数的值  
    var left=[],right=[];  
    for(var i=0;i<arr.length;i++){  
        if(arr[i]<newValue){  
            left.push(arr[i]);//基准点的左边的数传到左边数组  
        }else{  
            right.push(arr[i]);//基准点的右边的数传到右边数组  
        }  
    }  
    return quickSort(left).concat(newValue,quickSort(right));//递归不断重复比较  
}  
console.log(quickSort([31,4,5,52,1,8]));  //(6) [1, 4, 5, 8, 31, 52]




// 4、希尔排序
function shellSort(nums){//希尔排序
    var gaps=[5,3,1];//定义间隔区间
    for(var g=0;g<gaps.length;g++){//一个一个间隔值开始
        for(var i=gaps[g];i<nums.length;i++){//以间隔值遍历
            var temp=nums[i];//选中元素
            for(var j=i;j>=gaps[g]&&nums[j-gaps[g]]>temp;j-=gaps[g]){//如果前面一个大于后面一个
                nums[j]=nums[j-gaps[g]];//后移
            }
            nums[j]=temp;//填补
        }
    }
}
function show(nums){//显示数组
    for(var i=0;i<nums.length;i++){
        document.write(nums[i]+' ');
    }
    document.write('<br>');
}
var nums=[6,0,2,9,3,5,8,0,5,4];
show(nums);//6 0 2 9 3 5 8 0 5 4
shellSort(nums);//希尔排序
show(nums);//0 0 2 3 4 5 5 6 8 9



// 5、插入排序:
function sort(elements){
  //假设第0个元素是一个有序的数列,第1个以后的是无序的序列,
  //所以从第1个元素开始将无序数列的元素插入到有序数列中
  for(var i = 1; i < elements.length; i++){
    //升序
    if(elements[i] < elements[i-1]){
      //取出无序数列中的第i个作为被插入元素
      var guard = elements[i];
      //记住有序数列的最后一个位置,并且将有序数列位置扩大一个
      var j = i - 1;
      elements[i] = elements[j];
      
      //比大小,找到被插入元素所在的位置
      while(j >= 0 && guard < elements[j]){
        elements[j+1] = elements[j];
        j--;
      }
      //插入
      elements[j+1] = guard;
    }
  }
}
var elements = [10, 9, 8, 7, 6, 5];
console.log('before: ' + elements); //before: 10,9,8,7,6,5
sort(elements);
console.log('after: ' + elements); //after: 5,6,7,8,9,10



// 6、选择排序
function order(arry){
    var ary=arry
    function sorrt() {
    length = ary.length;
    for (var i = 0; i < length; i++) {
        _min = ary[i]
        k = i
        for (var j = i + 1; j < length; j++) {
            if (_min > ary[j]) {
                _min = ary[j]
                k = j
            }
        }
        ary[k] = ary[i]
        ary[i] = _min
    }
    return ary;
}
    return {sor:sorrt};
    }
     
var k=order([14,12,6,5,18,0,1,3,2])
console.log(k.sor()) //(9) [0, 1, 2, 3, 5, 6, 12, 14, 18]


// 附:js中数组(Array)的排序(sort)注意事项
var arrDemo = new Array();
arrDemo[0] = 10;
arrDemo[1] = 50;
arrDemo[2] = 51;
arrDemo[3] = 100;
arrDemo.sort(); //调用sort方法后,数组本身会被改变,即影响原数组
alert(arrDemo);//10,100,50,51 默认情况下sort方法是按ascii字母顺序排序的,而非我们认为是按数字大小排序
arrDemo.sort(function(a,b){return a>b?1:-1});//从小到大排序
alert(arrDemo);//10,50,51,100
arrDemo.sort(function(a,b){return a<b?1:-1});//从大到小排序
alert(arrDemo);//100,51,50,10
</script>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值