快速 排序 javascript实现

 //快速排序
        function QSort(L, low, high) {
            var pivot;
                while(low<high)
                {
                    pivot = Partition(L, low, high);//将L一分为二
                    QSort(L, low, pivot - 1);
                    low = pivot + 1;//采用迭代而不是递归的方法缩减堆栈深度,从而提高整体性能!
                }
        }
        function swap(L, l, h) {
            var temp = L[h];
            L[h] = L[l];
            L[l] = temp;
        }
        function Partition(L, low, high) {
            //三数取中优化算法 防止最小值过大或者过小
            var pivotkey,temp;
            var m = low + (high - low) / 2;
            m = Math.floor(m);
            if (L[low] > L[high]) {
                swap(L, low, high);
            }
            if (L[m] > L[high])
                swap(L, m, high);
            if (L[m]>L[low])
                swap(L, low, m);
            pivotkey = L[low];
            temp = pivotkey;
            while (low < high) {
                while (low<high&&L[high]>=pivotkey) {//找到比pivotkey小的值的下标,然后把当前值赋值给L[low]
                    high--;
                }
                L[low] = L[high];
                while (low<high&&L[low]<=pivotkey) {
                    low++;
                }
                L[high] = L[low];
            }
            L[low] = temp;
            return low;
        }

        var a = [1, 4, 2, 5, 7, 8, 9, 0, 3, 2];
            //MereSort(l);
        //MergeSort2(l);
        QSort(a, 0, a.length - 1);
        console.log(a);
时间: 2024-12-29 09:45:06

快速 排序 javascript实现的相关文章

造轮子和用轮子:快速入门JavaScript模块化

造轮子和用轮子:快速入门JavaScript模块化 时间 2016-03-16 21:59:39  SegmentFault 原文  https://segmentfault.com/a/1190000004619857 主题 JavaScript 前言 都说“不重复造轮子”,就像iPhone——它除了打电话还可以播放音乐——但是工程师不用从零开始做一个音乐播放功能,也许只要在iPhone的系统中整合一个ipod. 前端开发亦是如此,最理想化的开发状态就是,工程师只写核心业务代码,其他通用的功能

按键排序JavaScript对象

问题描述 我需要按键排序JavaScript对象. 因此如下: { 'b' : 'asdsad', 'c' : 'masdas', 'a' : 'dsfdsfsdf' } 会成为: { 'a' : 'dsfdsfsdf', 'b' : 'asdsad', 'c' : 'masdas' } 最佳解决方案 方法一 如果要迭代对象的属性,可以对键进行排序,然后检索关联的值: var myObj = { 'b': 'asdsadfd', 'c': 'masdasaf', 'a': 'dsfdsfsdf'

如何轻松快速学习JavaScript 呢?

JS给人那种感觉的原因多半是因为它如下的特点: 1:本身知识很抽象.晦涩难懂,如:闭包.内置对象.DOM. 2:本身内容很多,如函数库,对象库就一大堆. 3:混合多种编程思想. 4:辛苦学习后又看似和实际应用脱节. 通常学了很久的JS基础之后,变量.函数.对象你也都略知一二,但一到公司开发项目的时候,却又难以下手.因为公司在开发实际项目的时候通常都是直接用它的衍生库,比如:jquery,angular,boostrap,等,而这些库又多如牛毛,同时还有自己的难点.让你都不知道该学哪个好,甚至开始

快速理解JavaScript语法

目录 导论 JavaScript的学习可以跳过哪些 console对象与控制台 console对象 console对象与方法 console.log() console.table() console.count() console.assert() JSON对象 JSON方法 JSON.stringify() JSON.parse() 异步与promise 回调函数 事件监听 Promise 对象 Promise 对象的状态 Promise 构造函数 Promise.prototype.the

汇道科技:web新手快速入门JavaScript的技巧

我们在学习JavaScript,或其他任何编码技能的时候,往往是因为这些拦路虎而裹足不前:有些概念可能会造成混淆,尤其当你是从其他语言转过来的时候.找不到时间(有时是动力)学习.很容易忘记已经理解了的东西.工具多又在不断变化,所以不知道从哪里开始.幸运的是,这些拦路虎是可以被识别,并消灭的.在这篇文章中,汇道科技将介绍六个思维技巧来帮助你更快地学习JavaScript,并成为一个更快乐.更富有成效的程序员. 1.不要让未来的决策阻止你现在前进的方向 很多人学习JavaScript,问的第一个问题

三重for循环实现对二维数组的按列排序(JavaScript)

由C语言联想到的:三重for循环实现对二维数组的按列排序. 自己写的,水平有限,可能存在错误,忘指正~ function circle() { var a = [ [1, 4, 3, 2], [8, 6, 5, 7], [3, 7, 2, 5], [4, 8, 6, 1] ], t = 0, i, j, k; for(i = 0;i < 4;i++) { for(j = 0;j < 3;j++) { for(k = j + 1;k < 4;k++) { if(a[j][i] > a

选择排序javascript

简单选择排序是人们最熟悉的比较方式,其算法思想为:从数组的开头开始,将第一个元素和其他元素进行比较.检查完所有元素后,最小的元素会被放到数组的第一个位置,然后算法会从第二个位置继续.这个过程会一直进行,当进行到数组的倒数第二个位置时,所有的数据便完成了排序. 代码如下: 分析可得,简单选择排序的时间复杂度为O(n2).选择排序的主要操作是进行关键字之间的比较,因此改进简单选择排序应该从如何减少比较出发.其实现实生活中就有一个很好的例子,就是比赛总的锦标赛.8个人中选出冠军其实不需要7+6+5=1

如何快速理解JavaScript 中重要语句for循环

一.基本结构:for(起始状态:判断条件:状态改变){ 执行语句: } 执行顺序:for(var i=1;i<3;i++){ alert(i); } 1.判断条件    2.执行语句    3.状态改变 break(结束此循环).continue(跳过本次循环,开始下个循环) 二.例: 1.输出100 以内与7相关的数 <script type="text/javascript"> var str = ''; for(var i = 1; i <= 100; i

排序算法总结------选择排序 ---javascript描述

每当面试时避不可少谈论的话题是排序算法,上次面试时被问到写排序算法,然后脑袋一懵不会写,狠狠的被面试官鄙视了一番,问我是不是第一次参加面试,怎么可以连排序算法都不会呢?不过当时确实是第一次去面试,以此恶补排序算法. 一.基本排序算法:基本排序算法有冒泡排序,选择排序,插入排序. 选择排序算法思想:选择排序从数组的头开始,将第一个元素与其他元素进行比较,找到最小的元素,然后放到数组的第一个位置.然后再从第二个元素开始找比他小的元素,放到第二个位置,以此类推,重复上述步骤,当进行到数组的第二个位置时