Skip to content

Commit 4c8c3c6

Browse files
authored
Wiggle Sort
Initial File
1 parent f6dfcf3 commit 4c8c3c6

1 file changed

Lines changed: 69 additions & 0 deletions

File tree

Wiggle sort

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
def wiggleSort( nums ):
2+
if (nums == 0 or len(nums) < 2):
3+
return
4+
mid = (len(nums) + 1) // 2
5+
left = 0
6+
right = len(nums) - 1
7+
medium = quickSelect(nums, left, right, mid)
8+
temp = [0 for i in range(len(nums))]
9+
s = 0
10+
e = len(nums) - 1
11+
for i in range(len(nums)):
12+
if (nums[i] < medium):
13+
temp[s] = nums[i]
14+
s = s + 1
15+
elif (nums[i] > medium):
16+
temp[e] = nums[i]
17+
e = e - 1
18+
while (s < mid):
19+
temp[s] = medium
20+
s = s + 1
21+
while (e >= mid):
22+
temp[e] = medium
23+
e = e - 1
24+
smallStart = mid - 1
25+
largeStart = len(nums) - 1
26+
27+
for i in range(len(nums)):
28+
if (i % 2 == 0):
29+
nums[i] = temp[smallStart]
30+
smallStart = smallStart - 1
31+
else:
32+
nums[i] = temp[largeStart]
33+
largeStart = largeStart - 1
34+
return nums
35+
36+
def quickSelect(nums, left, right, mid):
37+
if left == right:
38+
return nums[left]
39+
pIndex = right
40+
pIndex = partition(nums, left, right, pIndex)
41+
if mid == pIndex:
42+
return nums[mid]
43+
elif mid < pIndex:
44+
return quickSelect(nums, left, pIndex - 1, mid)
45+
else:
46+
return quickSelect(nums, pIndex + 1, right, mid)
47+
48+
def partition(nums, left, right, pIndex):
49+
pivot = nums[pIndex]
50+
i = left - 1
51+
for j in range(left, right):
52+
if nums[j] <= pivot:
53+
i = i + 1
54+
swap(nums, i, j)
55+
swap(nums, i + 1, pIndex)
56+
return i + 1
57+
58+
59+
60+
def swap(nums, i, j):
61+
temp = nums[i]
62+
nums[i] = nums[j]
63+
nums[j] = temp
64+
65+
66+
nums = [1,3,2,2,3,1]
67+
print(wiggleSort(nums))
68+
69+

0 commit comments

Comments
 (0)