Skip to content

Commit 4eaf01b

Browse files
authored
Merge pull request AllAlgorithms#25 from Ditobaskoro/flashSort
create flashSort
2 parents 982334e + 962ddf3 commit 4eaf01b

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

sorting/flashSort.js

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
// JavaScript implementation of flash sort
2+
// Flashsort is a distribution sorting algorithm showing linear computational complexity O(n)
3+
//
4+
// Author: Dito Baskoro
5+
6+
function flash_sort(arr)
7+
{
8+
let max = 0, min = arr[0];
9+
let n = arr.length;
10+
let m = ~~(0.45 * n);
11+
let l = new Array(m);
12+
13+
for (let i = 1; i < n; ++i) {
14+
if (arr[i] < min) {
15+
min = arr[i];
16+
}
17+
if (arr[i] > arr[max]) {
18+
max = i;
19+
}
20+
}
21+
22+
if (min === arr[max]) {
23+
return arr;
24+
}
25+
26+
let c1 = (m - 1) / (arr[max] - min);
27+
28+
29+
for (let k = 0; k < m; k++) {
30+
l[k] = 0;
31+
}
32+
for (let j = 0; j < n; ++j) {
33+
k = ~~(c1 * (arr[j] - min));
34+
++l[k];
35+
}
36+
37+
for (let p = 1; p < m; ++p) {
38+
l[p] = l[p] + l[p - 1];
39+
}
40+
41+
let hold = arr[max];
42+
arr[max] = arr[0];
43+
arr[0] = hold;
44+
45+
//permutation
46+
let move = 0, t, flash;
47+
j = 0;
48+
k = m - 1;
49+
50+
while (move < (n - 1)) {
51+
while (j > (l[k] - 1)) {
52+
++j;
53+
k = ~~(c1 * (arr[j] - min));
54+
}
55+
if (k < 0) break;
56+
flash = arr[j];
57+
while (j !== l[k]) {
58+
k = ~~(c1 * (flash - min));
59+
hold = arr[t = --l[k]];
60+
arr[t] = flash;
61+
flash = hold;
62+
++move;
63+
}
64+
}
65+
66+
//insertion
67+
for (j = 1; j < n; j++) {
68+
hold = arr[j];
69+
i = j - 1;
70+
while (i >= 0 && arr[i] > hold) {
71+
arr[i + 1] = arr[i--];
72+
}
73+
arr[i + 1] = hold;
74+
}
75+
return arr;
76+
}
77+
78+
//test
79+
const array = [3, 0, 2, 5, -1, 4, 1, -2];
80+
console.log("Original Array");
81+
console.log(array);
82+
console.log("Sorted Array");
83+
console.log(flash_sort(array, 0, 5));

0 commit comments

Comments
 (0)