首页 > 解决方案 > 如何对日期使用选择排序?

问题描述

我正在尝试使用带有并行数组的选择排序进行编码,根据发布日期以升序(从最旧到最新)重新排列内容。确保与值关联的名称与另一个名称保持平行。日期应按月、日、年的顺序显示。我在看我的教科书,他们只显示了一个输入考试成绩的例子,我如何比较这个数组中的日期?

function main() {
  var myArr = new Array(["To Kill a Mockingbird", "July 11, 1960"], ["Jaws", "February 1, 1974"], ["Don Quixote", "July 11, 1615"], ["Moby-Dick", "October 18, 1851"], ["Northern Lights", "November 12, 1995"]);
  original(myArr);
  selectionSort(myArr);
}

function original(myarray) {
  for (var i = 0; i < 2; i++) {
    myarray[i];
    for (var j = 0; j < 2; j++) {
      myarray[i][j];
    }
  }
  var table = document.getElementById("myTable");

  for (var i = 0, row; row = table.rows[i]; i++) {
    for (var j = 0, col; col = row.cells[j]; j++) {
      col.innerText = myarray[i][j];

    }
  }

  return myarray;
}

function selectionSort(arr) {

  var minIdx, temp,
    len = arr.length;
  for (var i = 0; i < len; i++) {
    minIdx = i;
    for (var j = i + 1; j < len; j++) {
      if (arr[j] < arr[minIdx]) {
        minIdx = j;
      }
    }
    temp = arr[i];
    arr[i] = arr[minIdx];
    arr[minIdx] = temp;
  }

  var table2 = document.getElementById("myTable2");

  for (var i = 0, row; row = table2.rows[i]; i++) {
    for (var j = 0, col; col = row.cells[j]; j++) {
      col.innerText = arr[i][j];
    }
  }

  return arr;
}
main();
table {
  border: solid black;
}

body {
  margin: 10ex;
  color: black;
  font-weight: bold;
}

td {
  font-size: 18px;
  color: black;
  font-weight: bold;
  margin: 10%;
  padding: 5px;
  line-height: 120%;
  width: 75pt;
  height: 25pt;
  text-align: center;
}
<h2>Original Table</h2>

<table style="width: 50%" id="myTable" border="1">
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
</table>

<br/><br/>

<h2>Selection Sort</h2>
<table style="width: 50%" id="myTable2" border="1">
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
</table>

标签: javascript

解决方案


我认为主要问题是您正在比较数组而不是比较日期:

if (arr[j] < arr[minIdx]) {
        minIdx = j;
      }

.sort()您可以使用函数代替嵌套循环对元素进行排序:

function main() {
  var myArr = new Array(["To Kill a Mockingbird", "July 11, 1960"], ["Jaws", "February 1, 1974"], ["Don Quixote", "July 11, 1615"], ["Moby-Dick", "October 18, 1851"], ["Northern Lights", "November 12, 1995"]);
  original(myArr);
  selectionSort(myArr);


}

function original(myarray) {
  for (var i = 0; i < 2; i++) {
    myarray[i];
    for (var j = 0; j < 2; j++) {
      myarray[i][j];
    }
  }
  var table = document.getElementById("myTable");

  for (var i = 0, row; row = table.rows[i]; i++) {
    for (var j = 0, col; col = row.cells[j]; j++) {
      col.innerText = myarray[i][j];
    }
  }

  return myarray;
}

function selectionSort(arr) {
  // sort array
  let newArray = arr.sort(function(a, b) {
    const prev = new Date(a[1]);
    const next = new Date(b[1]);
    if(prev > next)
      return 1;
     
    if(prev < next)
      return -1;
      
    return 0;
  });
  

  var table2 = document.getElementById("myTable2");
  //console.log(table2.rows);
  for (var i = 0; i < table2.rows.length; i++) {
    // add title
    table2.rows[i].cells[0].innerText = newArray[i][0];

    // add date
    table2.rows[i].cells[1].innerText = newArray[i][1];
  }

  return newArray;
}

main();
table {
  border: solid black;
}

body {
  margin: 10ex;
  color: black;
  font-weight: bold;
}

td {
  font-size: 18px;
  color: black;
  font-weight: bold;
  margin: 10%;
  padding: 5px;
  line-height: 120%;
  width: 75pt;
  height: 25pt;
  text-align: center;
}
<h2>Original Table</h2>

<table style="width: 50%" id="myTable" border="1">
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
</table>

<br /><br />

<h2>Selection Sort</h2>
<table style="width: 50%" id="myTable2" border="1">
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
</table>


推荐阅读