`
deng131
  • 浏览: 675247 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JavaScript常用算法比较

阅读更多
JAVASCRIPT算法比较

<script>
    Array.prototype.swap = function(i, j)
    {
        var temp = this[i];
        this[i] = this[j];
        this[j] = temp;
    }

    Array.prototype.bubbleSort = function()
    {
        for (var i = this.length - 1; i > 0; --i)
        {
            for (var j = 0; j < i; ++j)
            {
                if (this[j] > this[j + 1]) this.swap(j, j + 1);
            }
        }
    }

    Array.prototype.selectionSort = function()
    {
        for (var i = 0; i < this.length; ++i)
        {
            var index = i;
            for (var j = i + 1; j < this.length; ++j)
            {
                if (this[j] < this[index]) index = j;
            }
            this.swap(i, index);
        }
    }

    Array.prototype.insertionSort = function()
    {
        for (var i = 1; i < this.length; ++i)
        {
            var j = i, value = this[i];
            while (j > 0 && this[j - 1] > value)
            {
                this[j] = this[j - 1];
                --j;
            }
            this[j] = value;
        }
    }

    Array.prototype.shellSort = function()
    {
        for (var step = this.length >> 1; step > 0; step >>= 1)
        {
            for (var i = 0; i < step; ++i)
            {
                for (var j = i + step; j < this.length; j += step)
                {
                    var k = j, value = this[j];
                    while (k >= step && this[k - step] > value)
                    {
                        this[k] = this[k - step];
                        k -= step;
                    }
                    this[k] = value;
                }
            }
        }
    }

    Array.prototype.quickSort = function(s, e)
    {
        if (s == null) s = 0;
        if (e == null) e = this.length - 1;
        if (s >= e) return;
        this.swap((s + e) >> 1, e);
        var index = s - 1;
        for (var i = s; i <= e; ++i)
        {
            if (this[i] <= this[e]) this.swap(i, ++index);
        }
        this.quickSort(s, index - 1);
        this.quickSort(index + 1, e);
    }

    Array.prototype.stackQuickSort = function()
    {
        var stack = [0, this.length - 1];
        while (stack.length > 0)
        {
            var e = stack.pop(), s = stack.pop();
            if (s >= e) continue;
            this.swap((s + e) >> 1, e);
            var index = s - 1;
            for (var i = s; i <= e; ++i)
            {
                if (this[i] <= this[e]) this.swap(i, ++index);
            }
            stack.push(s, index - 1, index + 1, e);
        }
    }

    Array.prototype.mergeSort = function(s, e, b)
    {
        if (s == null) s = 0;
        if (e == null) e = this.length - 1;
        if (b == null) b = new Array(this.length);
        if (s >= e) return;
        var m = (s + e) >> 1;
        this.mergeSort(s, m, b);
        this.mergeSort(m + 1, e, b);
        for (var i = s, j = s, k = m + 1; i <= e; ++i)
        {
            b[i] = this[(k > e || j <= m && this[j] < this[k]) ? j++ : k++];
        }
        for (var i = s; i <= e; ++i) this[i] = b[i];
    }

    Array.prototype.heapSort = function()
    {
        for (var i = 1; i < this.length; ++i)
        {
            for (var j = i, k = (j - 1) >> 1; k >= 0; j = k, k = (k - 1) >> 1)
            {
                if (this[k] >= this[j]) break;
                this.swap(j, k);
            }
        }
        for (var i = this.length - 1; i > 0; --i)
        {
            this.swap(0, i);
            for (var j = 0, k = (j + 1) << 1; k <= i; j = k, k = (k + 1) << 1)
            {
                if (k == i || this[k] < this[k - 1]) --k;
                if (this[k] <= this[j]) break;
                this.swap(j, k);
            }
        }
    }

    function generate()
    {
        var max = parseInt(txtMax.value), count = parseInt(txtCount.value);
        if (isNaN(max) || isNaN(count))
        {
            alert("个数和最大值必须是一个整数");
            return;
        }
        var array = [];
        for (var i = 0; i < count; ++i) array.push(Math.round(Math.random() * max));
        txtInput.value = array.join("\n");
        txtOutput.value = "";
    }

    function demo(type)
    {
        var array = txtInput.value == "" ? [] : txtInput.value.replace().split("\n");
        for (var i = 0; i < array.length; ++i) array[i] = parseInt(array[i]);
        var t1 = new Date();
        eval("array." + type + "Sort()");
        var t2 = new Date();
        lblTime.innerText = t2.valueOf() - t1.valueOf();
        txtOutput.value = array.join("\n");
    }
</script>

<body onload=generate()>
<table style="width:100%;height:100%;font-size:12px;font-family:宋体">
<tr>
    <td align=right>
        <textarea id=txtInput readonly style="width:100px;height:100%"></textarea>
    </td>
    <td width=150 align=center>
        随机数个数<input id=txtCount value=500 style="width:50px"><br><br>
        最大随机数<input id=txtMax value=1000 style="width:50px"><br><br>
        <button onclick=generate()>重新生成</button><br><br><br>& lt;br>
        耗时(毫秒):<label id=lblTime></label><br><br><br><br>
        <button onclick=demo("bubble")>冒泡排序</button><br><br>
        <button onclick=demo("selection")>选择排序</button><br><br>
        <button onclick=demo("insertion")>插入排序</button><br><br>
        <button onclick=demo("shell")>谢尔排序</button><br><br>
        <button onclick=demo("quick")>快速排序(递归)</button><br><br>
        <button onclick=demo("stackQuick")>快速排序(堆栈)</button><br><br& gt;
        <button onclick=demo("merge")>归并排序</button><br><br>
        <button onclick=demo("heap")>堆排序</button><br><br>
    </td>
    <td align=left>
        <textarea id=txtOutput readonly style="width:100px;height:100%"></textarea>
    </td>
</tr>
</table>
</body>
分享到:
评论

相关推荐

    基于javascript实现的一些常用算法

    这个名为"基于javascript实现的一些常用算法"的资源集合,很可能包含了一系列用JavaScript编写的经典算法实现,这对于学习和理解算法有着极大的帮助。让我们深入探讨一下这些算法及其在JavaScript中的实现。 1. **...

    Node.js-Nodorithm-提供一些常用算法封装的NPM包

    Node.js是一个基于Chrome V8引擎的...Nodorithm作为一个集合了多种常用算法的Node.js库,对于提升开发效率和代码质量有着显著的作用。无论是初学者还是经验丰富的开发者,都可以从中受益,更好地应对各种算法挑战。

    通过实例解析JavaScript常用排序算法

    JavaScript中的排序算法是编程基础知识的重要组成部分,特别是在处理数据和优化性能时显得尤为关键。本文将深入探讨四种常见的排序算法:冒泡排序、快速排序、选择排序以及插入排序,并通过实例代码进行详细解析。 ...

    JavaScript遗传算法之迷宫寻路

    JavaScript遗传算法之迷宫寻路是一种利用人工智能技术解决复杂问题的方法。遗传算法是模拟生物进化过程的一种优化技术,常用于解决最优化问题,如路径规划、组合优化等。在这个例子中,我们用JavaScript来实现这一...

    一些常用算法的JavaScript实践_JavaScript_下载.zip

    这个压缩包“一些常用算法的JavaScript实践”提供了JavaScript实现常见算法的实例,可以帮助开发者提升技能,理解并应用这些算法到实际项目中。 在JavaScript-Utilities-master文件夹中,我们可以期待找到一系列与...

    ES6的JavaScript算法思想实现之分而治之,动态规划,贪心算法和回溯算法 贪心算法和动态规划.pdf

    分而治之算法是一种常用的算法思想,它将原问题分解为多个小问题,解决小问题,然后将小问题的解决方案组合起来,得到原问题的解。这种算法思想在解决复杂问题时非常实用。在JavaScript中,分而治之算法可以使用递归...

    JavaScript参考手册(含jsva常用算法).zip

    JavaScript参考手册和Java常用算法手册是两个非常重要的资源,对于学习和掌握这两种编程语言的开发者来说,它们提供了深入的理解和实践指导。 JavaScript,通常简称为JS,是一种轻量级的解释型编程语言,广泛用于...

    javascript算法训练营

    JavaScript算法训练营是一个专注于提升JavaScript开发者算法能力的学习资源。在这个训练营中,参与者将深入学习和实践各种算法,从而提高编程技巧,理解数据结构,并掌握解决复杂问题的方法。JavaScript作为前端开发...

    JSHTML5游戏常用算法之路径搜索算法随机迷宫算法详解【普里姆算法】随机搜索算法.pdf

    "JSHTML5游戏常用算法之路径搜索算法随机迷宫算法详解【普里姆算法】随机搜索算法" 路径搜索算法是游戏开发中非常重要的一个算法,特别是在 RPG、SLG 中经常用到。在这些游戏中,通过路径指定目的地,人物或者 NPC ...

    leetcode和oj-algorithm:Javascript常用算法练习,对想找Javascript相关工作的人有帮助

    所以我用Javascript写了一些基本的算法,也希望其他人可以贡献一份力量,为我们这些热爱Javascript的人制作一个Javascript算法库! 力码 LeetCode 是准备技术面试的好地方,但 LeetCode 的在线评审只支持 C++、Java ...

    JavaScript常用数组算法小结|javascript-215980.pdf

    文章末尾我会把参考的来源附上去,如果直接看算法比较枯燥的可以到参考文献里去看,讲解的非常不错。 一、数组去重 方法1: //利用数组的indexOf方法 function unique (arr) { var result = []; for (var i = 0; ...

    【H5JS】游戏常用算法-路径搜索算法-随机迷宫算法(普里姆算法).pdf

    为了帮助开发者更好地理解和应用这些算法,本资源提供了一段JavaScript代码示例,该代码使用HTML5的canvas元素来绘制迷宫图形。开发者可以通过这段示例代码学习如何在游戏项目中实现普里姆算法和随机迷宫算法,...

    javascript-algorithms:JavaScript常用算法

    test2:等于= true 好的,让我们将排序与大列表进行比较,并将默认的javascript数组排序进行比较。 数组大小= 10000000 用本机排序获取了“ 3706ms” 自定义排序获取“ 1071ms” test3:等于= true 如何使用git ...

    将遗传算法应用于旅行商问题_JavaScript_html_代码_下载

    通过这个JavaScript实现的遗传算法解决旅行商问题的项目,开发者可以深入理解遗传算法的运作机制,同时也能学习到JavaScript编程和网页交互设计。这是一个很好的学习实践案例,对于提高问题解决能力和编程技巧都有...

    公历转换农历的算法(JavaScript)

    5. JavaScript 实现:JavaScript 是一种常用的编程语言,可以用来实现公历转换农历的算法。 6. ASP.NET 实现:ASP.NET 是一种常用的 Web 应用程序开发平台,可以用来实现公历转换农历的算法。 结论:公历转换农历的...

    Javascript常用运算符

    下面,我们将根据给定的文件信息,详细解析JavaScript中的一些常用运算符。 ### 算术运算符 #### 加法运算符 `+` 加法运算符用于将两个数值相加。例如,如果`x`为2,`y`为5,那么`x + y`的结果就是7。此外,当其中...

    JavaScript Tween算法及缓动效果 -源码.zip

    JavaScript Tween算法是动画效果中常用的一种技术,它用于在一段时间内平滑地改变一个或多个对象的属性。Tween,即“缓动”,在图形和游戏编程中尤其常见,用来实现平滑过渡效果,如物体的移动、旋转或颜色变化等。...

Global site tag (gtag.js) - Google Analytics