From 962ddf37c5e30105958bf5387cdc8cebec6abd48 Mon Sep 17 00:00:00 2001 From: Dito Date: Tue, 2 Oct 2018 12:06:46 +0800 Subject: [PATCH] create flashSort --- sorting/flashSort.js | 83 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 sorting/flashSort.js diff --git a/sorting/flashSort.js b/sorting/flashSort.js new file mode 100644 index 0000000..a16027b --- /dev/null +++ b/sorting/flashSort.js @@ -0,0 +1,83 @@ +// JavaScript implementation of flash sort +// Flashsort is a distribution sorting algorithm showing linear computational complexity O(n) +// +// Author: Dito Baskoro + +function flash_sort(arr) + { + let max = 0, min = arr[0]; + let n = arr.length; + let m = ~~(0.45 * n); + let l = new Array(m); + + for (let i = 1; i < n; ++i) { + if (arr[i] < min) { + min = arr[i]; + } + if (arr[i] > arr[max]) { + max = i; + } + } + + if (min === arr[max]) { + return arr; + } + + let c1 = (m - 1) / (arr[max] - min); + + + for (let k = 0; k < m; k++) { + l[k] = 0; + } + for (let j = 0; j < n; ++j) { + k = ~~(c1 * (arr[j] - min)); + ++l[k]; + } + + for (let p = 1; p < m; ++p) { + l[p] = l[p] + l[p - 1]; + } + + let hold = arr[max]; + arr[max] = arr[0]; + arr[0] = hold; + + //permutation + let move = 0, t, flash; + j = 0; + k = m - 1; + + while (move < (n - 1)) { + while (j > (l[k] - 1)) { + ++j; + k = ~~(c1 * (arr[j] - min)); + } + if (k < 0) break; + flash = arr[j]; + while (j !== l[k]) { + k = ~~(c1 * (flash - min)); + hold = arr[t = --l[k]]; + arr[t] = flash; + flash = hold; + ++move; + } + } + + //insertion + for (j = 1; j < n; j++) { + hold = arr[j]; + i = j - 1; + while (i >= 0 && arr[i] > hold) { + arr[i + 1] = arr[i--]; + } + arr[i + 1] = hold; + } + return arr; +} + +//test +const array = [3, 0, 2, 5, -1, 4, 1, -2]; +console.log("Original Array"); +console.log(array); +console.log("Sorted Array"); +console.log(flash_sort(array, 0, 5)); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy