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

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript">
    var arr = [1, 2, 4, 5, 7, 10]

    //快速排序
    //你有一堆硬币,硬币上的年份不同,你现在要把硬币按年号排好
    //第一步:你拿出年份大概是年份区域的二分之一的一个硬币(就是计算机拿出的数组第一个)
    //第二步:将其余每个硬币与这个硬币的年份对比,大于这个硬币年份的放右边,小于的放左边
    //这样你就得到了两堆硬币,一堆是小于你选硬币年份的,一堆是大于你选硬币年份的
    //第三步:将这左右两堆硬币分别当成刚开始的那堆硬币,然后再选出年份大概是年份区域的二分之一的一个硬币
    //第四步:(假设我选的是左侧的一堆硬币),然后重复第二步,又得到两堆硬币
    //第五步:(再选取左边的一堆硬币),重复第一步,第二 步,第三步
    //硬币的数量是有限的,一个硬币只有一个年份,不可能一个硬币分两半,所以当那一堆硬币就是一个硬币时就等于你已经将这堆分完毕
    //对人来说这样做很累很烦,但是对电脑来说只要是重复的事就可以运行相同的代码,很快就能解决


    function quickSort (arr) {
    if (arr.length <= 1) { return arr; }
    //如果硬币只有一个或没有,那就不用比了直接就是结果

    var pivotIndex = Math.floor(arr.length / 2);
    //选取大致为所选年份区域的二分之一的一个硬币
    var pivot = arr.splice(pivotIndex, 1)[0];
    //你所选出的硬币,不能再算在硬币堆里,要拿出来单独存放
    var left = [];
    //先定义左边的硬币堆
    var right = [];
    //先定义右边的硬币堆

    for (var i = 0; i < arr.length; i++){
    //要比较所有的硬币
    if (arr[i] < pivot) {
    //比你所选的硬币年份小,放左边一堆
    left.push(arr[i]);
    } else
    {
    //比你所选的硬币年份大,放右边一堆
    right.push(arr[i]);
    }
    }
    return quickSort(left).concat([pivot], quickSort(right));
    //将你所选的硬币放在的一堆硬币的中间
    }

    console.log(quickSort(arr));
    </script>
    </head>
    <body>
    </body>
    </html>

  • 相关阅读:
    SSH框架(一)Hibernate
    我要创业啦(基于MVC的在线教育系统)
    面向对象语言高并发技术数据库部分(一)----MyCat做MySQL负载均衡(享学课堂,咕泡学院听课笔记)
    数据库优化MySQL数据库性能优化(享学课堂听课笔记)
    系统集成项目管理工程师考试(经历)
    CSND使用(一直在学习)
    仓央嘉措不负如来不负卿
    Java与.net的选择和比较
    .Net编程之Web Service 和WCF的历史和特性
    .Net项目之分享自己的MVC+angularjs项目经历
  • 原文地址:https://www.cnblogs.com/111lll/p/7435768.html
Copyright © 2011-2022 走看看