简单排行榜的冒泡排序

时间:2015-04-16 01:31:38

标签: javascript arrays sorting leaderboard

我正在制作一个简单的视频游戏排行榜,它将根据预先设定的分数对用户分数进行排名,这将使他们的排名从最高到最低取决于。

<html>
  <!Foundation Page for building our Javascript programs>
  <head>
    <title>The Foundation Page </title>
    <script type="text/javascript">
      function leaderboard()
      {
        var leaderboardarray = new Array (5);
        var n, temp;
        ok=false;
        var score 
        var rank

        score = 150

        leaderboardarray[1] = 50;
        leaderboardarray[2] = 60;
        leaderboardarray[3] = 180;
        leaderboardarray[4] = 120;
        leaderboardarray[5] = score;

        while(!ok)
        {
          ok = true
          for (n=1; n<=5; n=n+1)
          { 
            if (leaderboardarray [n]<leaderboardarray [n-1])
            {
              leaderboardarray [n] = leaderboardarray [n-1];
              ok = false;
            }
          } 
        }

        for (n=5; n>=1; n=n-1) 
          document.write (leaderboardarray [n] + "<br>");
      }

    </script>
  </head>head>
  <body BGCOLOR="WHITE">
    <h2>The Foundation Page </h2>
    <hr>
    <script LANGUAGE="Javascript"> leaderboard() </script>

  </body>
</html>

它正常输出数组,但我仍然坚持数组如何从最高到最低输出值。当我将一个值放在高于其后的任何其他值时,它将只生成相同的值。当我改变其中一个值时,任何人都建议我应该做什么,所以将非常感激。我仍然是编程的新手,如果我做任何愚蠢的事,我很抱歉。谢谢!

2 个答案:

答案 0 :(得分:2)

您应该使用Array.sort。

但是,您发布的代码存在的问题是,您实际上并未交换冒泡排序。你只是用较大的值覆盖较小的值。

function bubbleSort(arr) {
  var n = arr.length, swapped, tmp;
  do {
    swapped = false;
    for (var i = 1; i < n; i++) {
      if (arr[i-1] < arr[i]) {
        tmp = arr[i];
        arr[i] = arr[i-1];
        arr[i-1] = tmp;
        swapped = true; 
      }
    }
  } while (swapped && n--)
}

a = [50, 60, 70, 80, 150, 120]

bubbleSort(a);
console.log(a);
// [150, 120, 80, 70, 60, 50]

答案 1 :(得分:0)

由于您使用的是没有原型或jQuery的Javascript,您是否尝试使用以下内容替换while语句:

leaderboardarray.sort(function(a, b){return b-a});

有一个great write-up of the Javascript sort function at w3schools.

<HTML>
<!--#Foundation Page for building our Javascript programs#-->
<HEAD>
<TITLE>The Foundation Page </TITLE>
<!--fixed this-->
<SCRIPT type="text/javascript">
    function leaderboard()
    {

            var n, temp;
            ok=false;
            var score 
            var rank

            var score = 150

            var leaderboardarray = new Array(5);
                leaderboardarray[0] = 50;
                leaderboardarray[1] = 60;
                leaderboardarray[2] = 180;
                leaderboardarray[3] = 120;
                leaderboardarray[4] = score;

            leaderboardarray.sort(function(a, b){return b-a});
            var myContent = '';
            for (var n=0;n<5;n++) 
                myContent += leaderboardarray[n] + "<br>";

            document.getElementById("leaderBoard").innerHTML = myContent;
    }

    //call the function here


</SCRIPT>
</HEAD>
<!--#Using CSS#-->
<BODY style="background-color:#FFF;">
        <H2>The Foundation Page </H2>
        <HR>
        <!--#This is a placeholder#-->
        <div id="leaderBoard"><script type="text/javascript">leaderboard();</script></div>

</BODY>
</HTML>

您的代码很少需要解决。

  • 你有两个头标。
  • 您正在对数组进行排序,然后显示 输出与声明递减。在这个我正在整理 数组按降序排列,然后显示升序输出。
  • 我也已经在0(他们想要的地方)开始了数组,这样可以减少for语句中的数学。
  • 我用CSS
  • 替换了bgcolor HTML标记
  • 更新了脚本代码,使用type代替language
  • 我没有使用document.write which can cause problems,而是替换占位符div的内容。

Here is a fiddle.