Javascript合并排序 - 按字母顺序排列的单词

时间:2016-04-12 10:57:29

标签: javascript mergesort

我的javascript代码是:

$("#yes").click(function() { mergeSort(arr); });



function mergeSort(arr)
{
var arr = getDataFromInput();
    if (arr.length < 2)
        return arr;

    var middle = parseInt(arr.length / 2);
    var left   = arr.slice(0, middle);
    var right  = arr.slice(middle, arr.length);

    return merge(mergeSort(left), mergeSort(right));
}

function merge(left, right)
{
    var result = [];

    while (left.length && right.length) {
        if (left[0] <= right[0]) {
            result.push(left.shift());
        } else {
            result.push(right.shift());
        }
    }

    while (left.length)
        result.push(left.shift());

    while (right.length)
        result.push(right.shift());
    writeResultToOutput(result);
}
function getDataFromInput() {
    return $("#w").val();
}

function writeResultToOutput(resultHTML) {
    $("#z").html(resultHTML);
}

我的HTML是:

<body>

    <label for="w">entry information</label><br>
    <textarea rows="40" cols="100" name="w" id="w"></textarea>



    Results
    <div id="z"></div>



    <button id="yes">Begin!</button>

</body>

理论上的目标是使用mergesort按字母顺序对此进行排序,但是当我输入一些像“空气无聊”这样的字样时并且按开始没有真正发生。这段代码出了什么问题? 我收到错误:

  

ReferenceError:$未定义

我知道html没有正确链接到JavaScript,但这不是问题,因为很明显我知道如何连接这两个。

我会在修改后给你完整的代码(错误消失但仍然没有对单词进行排序):

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="jquery-1.10.2.min.js"></script>
<script type="text/javascript">
  $("#yes").click(function() { mergeSort(arr); });



function mergeSort(arr)
{
var arr = getDataFromInput();
    if (arr.length < 2)
        return arr;

    var middle = parseInt(arr.length / 2);
    var left   = arr.slice(0, middle);
    var right  = arr.slice(middle, arr.length);

    return merge(mergeSort(left), mergeSort(right));
}

function merge(left, right)
{
    var result = [];

    while (left.length && right.length) {
        if (left[0] <= right[0]) {
            result.push(left.shift());
        } else {
            result.push(right.shift());
        }
    }

    while (left.length)
        result.push(left.shift());

    while (right.length)
        result.push(right.shift());
    writeResultToOutput(result);
}
function getDataFromInput() {
    return $("#w").val();
}

function writeResultToOutput(resultHTML) {
    $("#z").html(resultHTML);
}
</script>
</head>
<body>

    <label for="w">entry information</label><br>
    <textarea rows="40" cols="100" name="w" id="w"></textarea>



    Results
    <div id="z"></div>



    <button id="yes">Begin!</button>

</body>
</html>

我想用作arr的是来自浏览器级别的输入,我的意思是: enter image description here

最新版本:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>


</head>
<body>

    <label for="w">entry information</label><br>
    <textarea rows="40" cols="100" name="w" id="w"></textarea>



    Results
    <div id="z"></div>



    <button id="yes">Begin!</button>
<script type="text/javascript" src="jquery-1.10.2.min.js"></script>
<script type="text/javascript">
 $("#yes").click(function() {
      var arr = getDataFromInput();
      mergeSort(arr); 
});


function mergeSort(arr)
{

    if (arr.length < 2)
        return arr;

    var middle = parseInt(arr.length / 2);
    var left   = arr.slice(0, middle);
    var right  = arr.slice(middle, arr.length);

    return merge(mergeSort(left), mergeSort(right));
}

function merge(left, right)
{
    var result = [];

    while (left.length && right.length) {
        if (left[0] <= right[0]) {
            result.push(left.shift());
        } else {
            result.push(right.shift());
        }
    }

    while (left.length)
        result.push(left.shift());

    while (right.length)
        result.push(right.shift());
    writeResultToOutput(result);
}
function getDataFromInput() {
    return $("#w").val();
}

function writeResultToOutput(resultHTML) {
    $("#z").html(resultHTML);
}
</script>
</body>
</html>

仍然没有有效的输出,我的意思是没有任何输出

2 个答案:

答案 0 :(得分:1)

首先:

你的脚本在你的HTML之前。它在呈现之前就开始运行。 如果您要将其保留在HTML中,请将其放在正文结束标记之前。

要在点击时执行功能,您可以这样做:

$("#yes").click(mergeSort());

无需执行匿名功能。你已经有了一个名字。 而且您正在尝试传递之前尚未创建的参数。 &#34; var arr&#34;在函数内部。 开始检查这些东西,然后从那里开始。我稍后会回到这里。

希望它对你有所帮助。

答案 1 :(得分:0)

ReferenceError: $ is not defined表示未包含jQuery或在您的页面中包含jQuery之前编写代码

包含jQuery库,然后重试 http://code.jquery.com/jquery-1.10.2.min.js

修改

你需要像我这样调用我们的函数

$("#yes").click(function() {
      var arr = getDataFromInput();
      mergeSort(arr); 
});

并从mergeSort函数中删除var arr = getDataFromInput();

function mergeSort(arr)
{
//var arr = getDataFromInput(); this line is removed
if (arr.length < 2)
        return arr;