JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)

简介: JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)

本文实例总结了JS数组排序技巧。分享给大家供大家参考,具体如下:

1、冒泡排序

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

结果如下:


图片.png

2、sort排序

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


效果如下:


图片.png

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])); 

效果如图:


图片.png

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


图片.png

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);
sort(elements);
console.log(' after: ' + elements);

效果如图:

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())

效果如下:

附: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
相关文章
|
14天前
|
前端开发 JavaScript 算法
使用 JavaScript 数组方法实现排序与去重
【10月更文挑战第21天】通过灵活运用 `sort()` 方法和 `filter()` 方法,我们可以方便地实现数组的排序和去重。同时,深入理解排序和去重的原理,以及根据实际需求进行适当的优化,能够更好地应对不同的情况。可以通过实际的项目实践来进一步掌握这些技巧,并探索更多的应用可能性。
93 59
|
29天前
|
前端开发 JavaScript 索引
JavaScript 数组常用高阶函数总结,包括插入,删除,更新,反转,排序等,如map、splice等
JavaScript数组的常用高阶函数,包括遍历、插入、删除、更新、反转和排序等操作,如map、splice、push、pop、reverse等。
17 0
|
2月前
|
JavaScript 前端开发
用Javascript对二维数组DIY按汉语拼音的排序方法
用Javascript对二维数组DIY按汉语拼音的排序方法
|
3月前
|
JavaScript
js实现模糊搜索和排序
js实现模糊搜索和排序
16 0
|
4月前
|
JavaScript
js 事件流、事件冒泡、事件捕获、阻止事件的传播
js 事件流、事件冒泡、事件捕获、阻止事件的传播
73 1
|
4月前
|
JavaScript
JS 【详解】双指针排序 -- 数组合并后递增排序
JS 【详解】双指针排序 -- 数组合并后递增排序
28 0
|
4月前
|
前端开发 JavaScript
前端 JS 经典:最近距离排序
前端 JS 经典:最近距离排序
22 0
|
4月前
|
JavaScript 搜索推荐
js 混合排序(同时存在数字、字母、汉字等)
js 混合排序(同时存在数字、字母、汉字等)
237 0
|
前端开发 算法 JavaScript
JavaScript 基础排序的实现(二)
继上一篇O(n^2)的排序算法后,这一篇主要记录O(n*logn)的排序算法 1.快排(快速排序)   这一算法的核心思想为,先随机选一个数作为标兵或者说是标记(这个数一般来说选择该无序数组的中间那个元素;此处笔者选取第一个实现算法,当选取完毕后以此标兵为参照将比这个数大的放到他的右边,比他小的放到左边.
1126 0
|
JavaScript 算法 前端开发
JavaScript 基础排序的实现(一)
作为一个有追求的前端,忙里偷闲(闲得发慌)地复习了一下基础的排序算法,以此文留念. 本篇主要记录O(n²)复杂度的基础算法O(nlogn)的算法将在下次有空(闲得发慌)时更新 在记录时发现Es6语法中的解构赋值与传统的中间变量交换相比效率低下,经过几次测试发现其耗时大约为交换中间变量的两倍 1.
1388 0