freeCodeCamp/curriculum/challenges/japanese/10-coding-interview-prep/rosetta-code/sort-stability.md

3.7 KiB
Raw Blame History

id title challengeType forumTopicId dashedName
5a23c84252665b21eecc8014 ソートの安定性 5 302308 sort-stability

--description--

表のレコードを特定の列またはフィールドで並び替える時、安定ソート は同じキーを持つレコードの相対的な順序を常に保持します。

例えば、この国と都市の表で 2 番目の列の都市で安定ソートを行うと、米国のバーミンガムが英国のバーミンガムの上という順序が保たれます。 (このケースでは、不安定ソートでも米国のバーミンガムが英国のバーミンガムの上に配置される可能性はありますが、安定ソートのルーチンはそれを保証します)。

UK  London
US  New York
US  Birmingham
UK  Birmingham

同様に 最初の列だけに安定ソートを行うと、最初の項目として「UK London」が、最後の項目として「US Birmingham」が来ます (同じ最初の単語 「UK」または「US」 を持つ要素の順序が維持されるため)。

--instructions--

パラメータとして2 次元配列を取る関数を記述してください。 各要素には、上記の例に似た 2 つの要素があります。 この関数は、前述のように配列をソートし、ソートされた配列を返します。

--hints--

stableSort は関数とします。

assert(typeof stableSort == 'function');

stableSort([["UK", "London"], ["US", "New York"], ["US", "Birmingham"], ["UK", "Birmingham"]]) は配列を返す必要があります。

assert(
  Array.isArray(
    stableSort([
      ['UK', 'London'],
      ['US', 'New York'],
      ['US', 'Birmingham'],
      ['UK', 'Birmingham']
    ])
  )
);

stableSort([["UK", "London"], ["US", "New York"], ["US", "Birmingham"], ["UK", "Birmingham"]])[["US", "Birmingham"], ["UK", "Birmingham"], ["UK", "London"], ["US", "New York"]] を返す必要があります。

assert.deepEqual(
  stableSort([
    ['UK', 'London'],
    ['US', 'New York'],
    ['US', 'Birmingham'],
    ['UK', 'Birmingham']
  ]),
  [
    ['US', 'Birmingham'],
    ['UK', 'Birmingham'],
    ['UK', 'London'],
    ['US', 'New York']
  ]
);

stableSort([[2, 2], [1, 2], [1, 4], [1, 5]])[[2, 2], [1, 2], [1, 4], [1, 5]] を返す必要があります。

assert.deepEqual(
  stableSort([
    [2, 2],
    [1, 2],
    [1, 4],
    [1, 5]
  ]),
  [
    [2, 2],
    [1, 2],
    [1, 4],
    [1, 5]
  ]
);

stableSort([[11, 55], [12, 45], [11, 45], [32, 45]])[[12, 45], [11, 45], [32, 45], [11, 55]] を返す必要があります。

assert.deepEqual(
  stableSort([
    [11, 55],
    [12, 45],
    [11, 45],
    [32, 45]
  ]),
  [
    [12, 45],
    [11, 45],
    [32, 45],
    [11, 55]
  ]
);

stableSort([[10, 22], [1, 2], [1, 4], [1, 5], [10, 9]])[[1, 2], [1, 4], [1, 5], [10, 9], [10, 22]] を返す必要があります。

assert.deepEqual(
  stableSort([
    [10, 22],
    [1, 2],
    [1, 4],
    [1, 5],
    [10, 9]
  ]),
  [
    [1, 2],
    [1, 4],
    [1, 5],
    [10, 9],
    [10, 22]
  ]
);

stableSort([[55, 54], [12, 22], [31, 43], [31, 54], [10, 49]])[[12, 22], [31, 43], [10, 49], [55, 54], [31, 54]] を返す必要があります。

assert.deepEqual(
  stableSort([
    [55, 54],
    [12, 22],
    [31, 43],
    [31, 54],
    [10, 49]
  ]),
  [
    [12, 22],
    [31, 43],
    [10, 49],
    [55, 54],
    [31, 54]
  ]
);

--seed--

--seed-contents--

function stableSort(arr) {

}

--solutions--

function stableSort(arr) {
  arr.sort(function(a, b) {
    return a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0;
  });
  return arr;
}