zoukankan      html  css  js  c++  java
  • 数组排序

      1.冒泡排序

      var ary=[0,1000,800,12,23,22,24,45,5,78,15,12,12,23,1245,56];
      function bubbleSort(ary){
        var temp=null;
    //    做一个标记
        var flag=false;
    //1.循环ary.length-1次,在循环中每次拿第一项与后一项比较,大于后一项与其交换位置,(每轮可以循环出一个最大值放在最后);
    //    2.做一个标记flag,标记是否循环过;
        for(var i=0;i<ary.length-1;i++){
          for(var j=0;j<ary.length-i-1;j++){
            if (ary[j]>ary[j+1]){
              temp=ary[j];
              ary[j]=ary[j+1];
              ary[j+1]=temp;
              flag=true;
            }
          }
    //      判断上一轮是否修改了,如果修改了,那把标记改为false,没有修改直接跳出大循环
          if (flag){
            flag=false;
          }else{
            break
          }
        }
        return ary
      }
     var result=bubbleSort(ary);
      console.log(result);

    2.快速排序

      var ary=[0,1000,800,12,23,22,24,45,33,78,15,12,12,23,1245,56];
      function quickSort(ary){
    //    1.判断需要排序的数组个数必须大于1个
        if (ary.length<=1){
          return ary
        }
    //    2.寻找中心的index,及对应的value,把中间值截取出来,注意返回的是数组
        var pointIndex=Math.floor(ary.length/2);
        var pointValue=ary.splice(pointIndex,1)[0];
        var left=[];
        var right=[];
    //    3.循环剩下的值,与中间值做对比,分类
        for(var i=0;i<ary.length;i++){
          if (ary[i]>pointValue){
            right.push(ary[i])
          }else{
            left.push(ary[i])
          }
        }
    //    4.递归,对左边,右边数组重复操作,别忘了加中间截掉的值
        return quickSort(left).concat([pointValue],quickSort(right))
      }
      var result=quickSort(ary)
      console.log(result)

    3.插入排序

      var ary=[12,23,12,23,45,48,165,48,465,4,89,165];
      function insetSort(ary){
    //    1.创建新数组
        var newAry=[];
    //    2.去一个值放在新数组中
        newAry.push(ary[0]);
        for(var i=1;i<ary.length;i++){
          var cur=ary[i];
    //      3.新数组从后向前循环
          for(var j=newAry.length-1;j>=0;){
    //        4.新数组中的值大于比较值时
            if (newAry[j]>cur){
    //          j--;当j==-1时,证明是最小的了,直接添加到开始
              j--
              if (j==-1){
                newAry.unshift(cur)
              }
            }else{
    //          5.否则就是很大喽,那就直接添加到J项后面,J+1项前面
              newAry.splice(j+1,0,cur);
              j=-1
            }
          }
        }
        return newAry
      }
      console.log(insetSort(ary))
  • 相关阅读:
    node.js 入门笔记3
    Linux常用命令大全(非常全!!!)
    数据库导入导出命令(结构+数据)?
    列举 创建索引但是无法命中索引的8种情况。
    简述触发器、函数、视图、存储过程?
    什么是事务?MySQL如何支持事务?
    简述数据库三大范式
    MySQL常见数据库引擎及比较?
    列举常见的关系型数据库和非关系型都有那些?
    操作系统常见面试题
  • 原文地址:https://www.cnblogs.com/liangfc/p/8707146.html
Copyright © 2011-2022 走看看