简单排行榜的冒泡排序
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. 的内容
你应该使用 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]
我正在创建一个简单的视频游戏排行榜,它将根据预设分数对用户分数进行排名,这将根据从最高到最低的顺序排列他们的排名。
<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. 的内容
你应该使用 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]