forked from TheAlgorithms/JavaScript
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSimplifiedWiggleSort.js
More file actions
Latest commit
36 lines (31 loc) · 1.19 KB
/
Copy pathSimplifiedWiggleSort.js
File metadata and controls
36 lines (31 loc) · 1.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
* Wiggle sort sorts the array into a wave like array.
* An array ‘arr[0..n-1]’ is sorted in wave form if arr[0] <= arr[1] >= arr[2] <= arr[3] >= arr[4] <= …..
* KEEP IN MIND: there are also more strict definitions of wiggle sort which use
* the rule arr[0] < arr[1] > arr[2] < arr[3] > arr[4] < … but this function
* allows for equality of values next to each other.
*/
import{quickSelectSearch}from'../Search/QuickSelectSearch.js'
exportconstsimplifiedWiggleSort=function(arr){
// find Median using QuickSelect
letmedian=quickSelectSearch(arr,Math.floor(arr.length/2.0))
median=median[Math.floor(arr.length/2.0)]
constsorted=newArray(arr.length)
letsmallerThanMedianIndx=0
letgreaterThanMedianIndx=arr.length-1-(arr.length%2)
for(leti=0;i<arr.length;i++){
if(arr[i]>median){
sorted[greaterThanMedianIndx]=arr[i]
greaterThanMedianIndx-=2
}else{
if(smallerThanMedianIndx<arr.length){
sorted[smallerThanMedianIndx]=arr[i]
smallerThanMedianIndx+=2
}else{
sorted[greaterThanMedianIndx]=arr[i]
greaterThanMedianIndx-=2
}
}
}
returnsorted
}