简单排行榜的冒泡排序

bubble sort for simple 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>

它正常输出数组,但我对数组如何从最高到最低输出值感到困惑。当我在它后面放置一个高于任何其他值的值时,它只会产生相同的值。当我将其中一个值更改为 Would anyone suggests on what I should do to do so would be much appreciated.我对编程还是个新手,如果我做错了什么,我很抱歉。谢谢!

由于您使用的 Javascript 没有原型或 jQuery,您是否尝试过用这样的东西替换 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>

您的代码中有几处需要解决。

  • 你有两个头标签。
  • 您正在对数组进行排序,然后显示 带有递减 for 语句的输出。在此我排序 数组降序排列,然后显示升序输出。
  • 我也从 0(它们想要的位置)开始数组,这样可以减少 for 语句中的数学运算。
  • 我用 CSS
  • 替换了 bgcolor HTML 标签
  • 更新了脚本标签以使用 type 而不是 language
  • 我没有使用 document.write which can cause problems,而是替换了占位符 div.
  • 的内容

Here is a fiddle.

你应该使用 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]