--- id: 5a23c84252665b21eecc8014 title: Стабільне сортування challengeType: 5 forumTopicId: 302308 dashedName: sort-stability --- # --description-- При сортуванні записів в таблиці за певним стовпцем або полем [стабільне сортування](https://en.wikipedia.org/wiki/Stable_sort#Stability) завжди зберігає відносний порядок записів з відповідним ключем. Наприклад, у цій таблиці країн і міст стабільне сортування в **другому** стовпці розташує Бірмінгем у США над Бірмінгемом у Великобританії серед міст. (Хоча нестабільне сортування *може* в цьому випадку розташувати Бірмінгем у США над Бірмінгемом у Великобританії, стабільна процедура сортування це *забезпечить*).
UK London US New York US Birmingham UK BirminghamАналогічним чином стабільне сортування лише першої колонки призведе до розташування «UK London» першим елементом, а «US Birmingham» – останнім (оскільки порядок елементів, що мають одне і те ж перше слово – «UK» або «US» – буде враховуватись). # --instructions-- Напишіть функцію, яка приймає 2D-масив як параметр. Кожен елемент містить 2 елементи, подібні до прикладу вище. Функція повинна впорядкувати масив, як згадувалося раніше, і повернути впорядкований масив. # --hints-- `stableSort` має бути функцією. ```js assert(typeof stableSort == 'function'); ``` `stableSort([["UK", "London"], ["US", "New York"], ["US", "Birmingham"], ["UK", "Birmingham"]])` має повернути масив. ```js 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"]]`. ```js 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]]`. ```js 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]]`. ```js 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]]`. ```js 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]]`. ```js 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-- ```js function stableSort(arr) { } ``` # --solutions-- ```js function stableSort(arr) { arr.sort(function(a, b) { return a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0; }); return arr; } ```