• 数组中元素的排序(常用的冒泡排序、选择排序、快速排序)


    1.冒泡排序(以从小到大为例)

    分析】:冒泡排序的思想就是,两两进行比较,第一个元素和第二个元素进行比较,如果第一个元素比第二个元素大,则这两个元素交换位置,然后第二个元素和第三个元素进行比较,如果第二个元素比第三个元素大,交换位置,依次类推,知道到最后一个元素。在比较的时候,每进行一轮比较,就可以找到当前这一轮的最大值, 我们可以将每一轮找到的最大值放到最后,知道最终剩下两个值,比较完之后,就可以将当前数列的数据按照从小到大的顺序排列好。

    以:a=[  2 ,  6  ,8  ,9  ,1  ,2 ]  数列为例。

    第一轮: 2    6   8   9   1   2       第二轮: 2   6   8   1   2       第三轮:2  6  1  2    第四轮:1  2   2    第五轮:1   2

         2   6    8   9   1   2           2    6   8   1   2           2     1  6  2        1     2  2

         2   6    8   9   1   2           2    6      1  8   2            2  1  2  6

         2   6   8    1   9   2           2    6   1  2   8          

         2  6    8   1   2   9

    代码:

    var arr = [ 2 ,  6  ,8  ,9  ,1  ,2 ];
    function bubbleSort(arr) {
      //确定轮数
      for (var i = 0; i < arr.length; i++) {
        //每一轮数值比较
        for (var j = i; j < arr.length-1; j++) {
          //谁小谁放在前面
          if (arr[i] > arr[i + 1]) {
            var temp = arr[i];
            arr[i] = arr[i + 1];
            arr[i + 1] = temp;
          }
        }
      }
      return arr;
    }
    console.log(bubbleSort(arr));
     
    运行结果:  [1, 2, 2, 6, 8, 9]
     
    2. 选择排序(从小到大排序)
    【分析】:选择排序,遵循的是打擂台的游戏。冠军只有一个,主要与每个人进行比,最后胜出者为冠军。第一个人和后面的每个人都要打,谁小谁就放在最前面,然后第二个人和后面的每个人都要打,谁小,谁就是次二,依次类推。
    还是以:a=[  2 ,  6  ,8  ,9  ,1  ,2 ]  数列为例。  
    第一轮: 2   6  8  9  1  2    第二轮:6  8  9  2  2    第三轮:8  9  6  2    第四轮:   8  9  6    第五轮:8  9
         2   6  8  9  1  2        6  8  9  2  2        6  9  8  2        6  9  8  
         2   6     8     9  1  2        2  8  9  6  2        2  9  8  6
           1      6   8     9     2  2        2  8  9  6  2
           1   6      8  9  2  2
    代码: 
    arr =[ 2 ,  6  ,8  ,9  ,1  ,2 ];
    function chooseSort(arr) {
      // 确定轮数
      for (var i = 0; i < arr.length-1; i++) {
        // 每一轮都和第一个进行比较
        for (var j = i + 1; j < arr.length; j++) {
          // 谁小谁放在前面
          if (arr[i] > arr[j]) {
            var temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
          }
        }
      }
      return arr;
    }
    console.log(chooseSort(arr));
     
    运行结果:  [1, 2, 2, 6, 8, 9]。
     
    3. 快速排序(从小到大排序)
    【分析】:将偏中间的数作为基准值,小于它的放在数组的左边,大于它的放在数组的右边,一轮比完之后,我们再将左边的左边的作为一个数组,右边的作为一个数组,然后分别找中间的技术,再按上面的方法进行计算(也就是递归),直到数组中剩下一个元素(也是循环结束的终止条件)。

     代码:

    arr = [2, 6, 8, 9, 1, 2];
    function quickSort(arr) {
      if(arr.length <= 1) {
        return arr;
      }
      var midIndex = parseInt(arr.length / 2);
      var midValue = arr[midIndex];
      var leftArr = [];
      var rightArr = [];

      for(var i=0;i< arr.length;i++) {
        if( i== midIndex) {
          continue;
        }
        if(arr[i] < midValue) {
          leftArr.push(arr[i]);
        }else {
          rightArr.push(arr[i]);
        }
      }
      return quickSort(leftArr).concat(midValue).concat(quickSort(rightArr));
    }
    console.log(quickSort(arr));

    运行结果:  [1, 2, 2, 6, 8, 9]。

    4.常见的还有希尔排序和插入排序,在这里就不做详细的介绍的。

     
     
     
     
     
     
     
     
  • 相关阅读:
    前端利用vueelementadmin搭建流程总结
    redis持久化机制
    Java常用阻塞队列
    垃圾回收之并发情况下如何确定对象可达
    手写LRU算法
    SynchronousQueue详解
    (mysql)存储引擎、索引及优化、事务与锁
    (多线程)synchronized同步对象不能是Integer等类型
    (@Validated)参数合法性校验框架 的常用注解
    (Sql Server)分页
  • 原文地址:https://www.cnblogs.com/lxz123/p/11443999.html
Copyright © 2020-2023  润新知