Skip to content

Commit 9f7639e

Browse files
authored
Merge pull request TheAlgorithms#74 from KuLi/cycleSort
Implemented cycle sort algorithm
2 parents 2d50357 + 7a81493 commit 9f7639e

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

Sorts/cycleSort.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*
2+
Wikipedia says: Cycle sort is an in-place, unstable sorting algorithm,
3+
a comparison sort that is theoretically optimal in terms of the total
4+
number of writes to the original array, unlike any other in-place sorting
5+
algorithm. It is based on the idea that the permutation to be sorted can
6+
be factored into cycles, which can individually be rotated to give a sorted result.
7+
*/
8+
function cycleSort(list) {
9+
10+
let writes = 0;
11+
for (let cycleStart = 0; cycleStart < list.length; cycleStart++) {
12+
13+
let value = list[cycleStart];
14+
let position = cycleStart;
15+
16+
// search position
17+
for (let i = cycleStart+1; i < list.length; i++) {
18+
19+
if (list[i] < value) {
20+
position++;
21+
}
22+
}
23+
// if its the same continue
24+
if (position == cycleStart) {
25+
continue;
26+
}
27+
28+
while (value == list[position]) {
29+
position++;
30+
}
31+
32+
let oldValue = list[position];
33+
list[position] = value;
34+
value = oldValue;
35+
writes++;
36+
37+
// rotate the rest
38+
while (position != cycleStart) {
39+
position = cycleStart;
40+
for (let i = cycleStart +1; i < list.length; i++) {
41+
42+
if (list[i] < value) {
43+
position++;
44+
}
45+
}
46+
while (value == list[position]) {
47+
position++;
48+
}
49+
let oldValueCycle = list[position];
50+
list[position] = value;
51+
value = oldValueCycle;
52+
writes++;
53+
}
54+
}
55+
return writes;
56+
}
57+
let arrOrignal = [5, 6, 7, 8, 1, 2,12, 14];
58+
//Array before Sort
59+
console.log(arrOrignal);
60+
cycleSort(arrOrignal);
61+
//Array after sort
62+
console.log(arrOrignal);

0 commit comments

Comments
 (0)
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