Skip to content

Commit 60e7557

Browse files
add radix sort
1 parent 164bc50 commit 60e7557

File tree

5 files changed

+80
-0
lines changed

5 files changed

+80
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
3. [Сортировка подсчётом / Counting Sort](https://github.com/dmitrymorozoff/algorithms-in-javascript/blob/master/source/sorts/counting-sort/counting-sort.js) | [Инфо](https://www.youtube.com/watch?v=6dk_csyWif0)
99
4. [Сортировка чёт-нечет / OddEven Sort](https://github.com/dmitrymorozoff/algorithms-in-javascript/blob/master/source/sorts/odd-even-sort/odd-even-sort.js) | [Инфо](https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D1%87%D1%91%D1%82-%D0%BD%D0%B5%D1%87%D0%B5%D1%82)
1010
5. [Быстрая сортировка / Quick Sort](https://github.com/dmitrymorozoff/algorithms-in-javascript/blob/master/source/sorts/quick-sort/quick-sort.js) | [Инфо](https://habrahabr.ru/sandbox/29775/)
11+
6. [Поразрядная сортировка / Radix Sort](https://github.com/dmitrymorozoff/algorithms-in-javascript/blob/master/source/sorts/radix-sort/radix-sort.js) | [Инфо](http://trubetskoy1.narod.ru/alg/radixsort.html)
1112

1213
## Структуры данных / Data Structures
1314
1. [Стек / Stack](https://github.com/dmitrymorozoff/algorithms-in-javascript/blob/master/source/structures/stack.js) | [Инфо](https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D0%BA)

index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
<script src="./source/sorts/selection-sort/selection-sort.js" type="module"></script>
1515
<script src="./source/sorts/odd-even-sort/odd-even-sort.js" type="module"></script>
1616
<script src="./source/sorts/quick-sort/quick-sort.js" type="module"></script>
17+
<script src="./source/sorts/radix-sort/radix-sort.js" type="module"></script>
1718
<script src="./source/structures/stack.js" type="module"></script>
1819
<script src="./source/structures/queue.js" type="module"></script>
1920
<script src="./source/structures/singly-list.js" type="module"></script>

source/sorts/radix-sort/radix-sort.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { pad } from "../../utils//helpers.js";
2+
3+
/**
4+
* Функция разделения массива
5+
* @param {any} array Входящий массив
6+
* @param {any} length Максимальное количество разрядов в сортируемых величинах
7+
* @param {any} range Количество возможных значений одного разряда
8+
* @returns
9+
*/
10+
export default function radixSort(arr, length, range) {
11+
let lists = [];
12+
let numDischarge = length - 1;
13+
let sortedArray = [];
14+
for (let i = 0; i < arr.length; i++) {
15+
if (arr[i].toString().length < length) {
16+
arr[i] = pad(arr[i], length);
17+
}
18+
}
19+
while (numDischarge >= 0) {
20+
sortedArray = [];
21+
for (let i = 0; i < range; i++) {
22+
lists[i] = [];
23+
}
24+
for (let i = 0; i < arr.length; i++) {
25+
let indexValue = null;
26+
let arrayValues = arr[i].toString().split("");
27+
indexValue = arrayValues[numDischarge];
28+
lists[indexValue].push(arr[i]);
29+
}
30+
for (let i = 0; i < lists.length; i++) {
31+
if (!!lists[i]) {
32+
for (let j = 0; j < lists[i].length; j++) {
33+
sortedArray.push(lists[i][j]);
34+
}
35+
}
36+
}
37+
arr = [];
38+
arr = [...sortedArray];
39+
numDischarge--;
40+
}
41+
for (let i = 0; i < sortedArray.length; i++) {
42+
if (typeof sortedArray[i] === "string") {
43+
sortedArray[i] = parseInt(sortedArray[i], 10);
44+
}
45+
}
46+
return sortedArray;
47+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import radixSort from "./radix-sort";
2+
3+
describe("radix-sort", () => {
4+
test("should return [1, 22, 44, 45, 56, 76, 123, 5525, 54446785] if sort", () => {
5+
const testArray = [22, 123, 45, 44, 76, 1, 54446785, 5525, 56];
6+
expect(radixSort(testArray, 8, 10)).toEqual([
7+
1,
8+
22,
9+
44,
10+
45,
11+
56,
12+
76,
13+
123,
14+
5525,
15+
54446785
16+
]);
17+
});
18+
});

source/utils/helpers.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,16 @@ export function repeatString(firstString, secondString) {
4141
}
4242
return resultString;
4343
}
44+
45+
/**
46+
* Вставка нулей в начало строки до определенной длины
47+
* @param {any} num Число
48+
* @param {any} size Размер финальной строки
49+
*/
50+
export function pad(num, size) {
51+
var string = num.toString();
52+
while (string.length < size) {
53+
string = "0" + string;
54+
}
55+
return string;
56+
}

0 commit comments

Comments
 (0)