js排序

排序方法有很多,这里只是根据自己的个人理解,做一些记录,希望大家批评指正

一、利用sort进行排序

var arr = [2, 3, 4, 1, 100, 23, 46, 67, 20, 18];
/**
 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
 若 a 等于 b,则返回 0。
 若 a 大于 b,则返回一个大于 0 的值。
 */
 arr.sort(function(a, b) {
     return a - b;
 })

二、冒泡法排序(最简单,也最慢)

 function sort(array) {
     var i = 0,
         len = array.length,
         j, d;
     for (; i < len; i++) {
         for (j = 0; j < len; j++) {
             if (array[i] < array[j]) {
                 d = array[j];
                 array[j] = array[i];
                 array[i] = d;
             }
         }
     }
     return array;
 }

三、快速排序

理解:把比这个数小的放在这个数左边,比这个数大的放在这个数右边,一样大的和这个数放在一起,最后,左右两边各自重复上述过程

 var array = [1, 45, 4, 3, 6, 46, 7];
 quickSort(array);

  function quickSort(array) {
      var i = 0;
      var j = array.length - 1;
      var Sort = function(i, j) {
          // 结束条件
          if (i == j) {
              return
          };
          var key = array[i];
          var stepi = i; // 记录开始位置
          var stepj = j; // 记录结束位置
          while (j > i) {
              // j <<-------------- 向前查找
              if (array[j] >= key) {
                  j--;
              } else {
                  array[i] = array[j]
                      //i++ ------------>>向后查找
                  while (j > ++i) {
                      if (array[i] > key) {
                          array[j] = array[i];
                          break;
                      }
                  }
                  // 最后一个空位留给 key
                  array[i] = key;
              }
          }
          // 如果第一个取出的 key 是最小的数
          if (stepi == i) {
              Sort(++i, stepj);
              return;
          }
          // 递归
          Sort(stepi, i);
          Sort(j, stepj);
      }
      Sort(i, j);
      return array;
  }

以下是个人理解,可能有问题,希望发现问题的大神能留言批评指正
1, 45, 4, 3, 6, 46, 7
第一步:sort(0,6) 1是所有里面最小的,所以第一次执行sort后,数组没有变化.
第二步:sort(1,6) 1, 45, 4, 3, 6, 46, 7 (45和7比较),将7与45换位置
1, 7, 4, 3, 6, 46, 45 然后(4与45比较)
1, 7, 4, 3, 6, 46, 45 然后(3与45比较)
1, 7, 4, 3, 6, 46, 45 然后(6与45比较)
1, 7, 4, 3, 6, 45, 46 然后(46与45比较)45与46换位置。此时45左边都比45小,右边都比45大
第三步:sort(1,4) 1, 7, 4, 3, 6

四、插入排序

 var array = [1, 45, 4, 3, 6, 46, 7];
 insertSort(array);

 function insertSort(array) {
     for (var i = 1; i < array.length; i++) {
         var key = array[i];
         var j = i;
         while (--j >= 0) {
             if (array[j] > key) {
                 array[j + 1] = array[j];
                 array[j] = key;
             }
         }
     }
     return array;
 }

每次取当前值前面的一个进行对比,如果比当前值大则两个数兑换位置。以此类推。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值