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

3.6 KiB
Raw Blame History

id title challengeType forumTopicId dashedName
5a23c84252665b21eecc8014 Stabilità dell'ordinamento 5 302308 sort-stability

--description--

Quando si ordinano i record in una tabella per una particolare colonna o campo, un ordinamento stabile manterrà sempre l'ordine relativo dei record che hanno la stessa chiave.

Ad esempio, in questa tabella di paesi e città, un ordinamento stabile sulla seconda colonna, le città, manterrebbe US Birmingham sopra UK Birmingham. (Anche se un ordinamento instabile potrebbe, in questo caso, posizionare US Birmingham sopra UK Birmingham, un ordinamento stabile lo garantirebbe esso).

UK  London
US  New York
US  Birmingham
UK  Birmingham

Allo stesso modo, l'ordinamento stabile fatto solo sulla prima colonna genererebbe "UK London" come primo elemento e "US Birmingham" come ultimo elemento (perché l'ordine degli elementi con la stessa prima parola "UK" o "US" sarebbe mantenuto).

--instructions--

Scrivi una funzione che richiede un array bidimensionale come parametro. Ogni elemento ha 2 elementi simili all'esempio precedente. La funzione dovrebbe ordinare l'array come menzionato precedentemente e restituire l'array ordinato.

--hints--

stableSort dovrebbe essere una funzione.

assert(typeof stableSort == 'function');

stableSort([["UK", "London"], ["US", "New York"], ["US", "Birmingham"], ["UK", "Birmingham"]]) dovrebbe restituire un array.

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

stableSort([["UK", "London"], ["US", "New York"], ["US", "Birmingham"], ["UK", "Birmingham"]]) dovrebbe restituire [["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]]) dovrebbe restituire [[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]]) dovrebbe restituire [[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]]) dovrebbe restituire [[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]]) dovrebbe restituire [[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;
}