Skip to content

Commit 158bab1

Browse files
committed
Added wave sort a new sorting technique
1 parent bd8085c commit 158bab1

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

sorts/wave_sort.py

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
def wave_sort(arr):
2+
if len(arr) <= 1:
3+
return arr
4+
5+
# Step 1: Divide the array into smaller sub-arrays
6+
mid = len(arr) // 2
7+
left_half = wave_sort(arr[:mid])
8+
right_half = wave_sort(arr[mid:])
9+
10+
# Step 2: Sort each sub-array individually
11+
left_half.sort()
12+
right_half.sort()
13+
14+
# Step 3: Shuffle the sorted sub-arrays in a wave-like pattern
15+
shuffled_array = []
16+
i, j = 0, 0
17+
toggle = True
18+
19+
while i < len(left_half) and j < len(right_half):
20+
if toggle:
21+
shuffled_array.append(left_half[i])
22+
i += 1
23+
else:
24+
shuffled_array.append(right_half[j])
25+
j += 1
26+
toggle = not toggle
27+
28+
# Append remaining elements if any
29+
shuffled_array.extend(left_half[i:])
30+
shuffled_array.extend(right_half[j:])
31+
32+
# Step 4: Merge the sub-arrays back together
33+
final_array = []
34+
n = len(shuffled_array)
35+
for k in range(n):
36+
if k % 2 == 0:
37+
final_array.append(shuffled_array[k])
38+
else:
39+
final_array.append(shuffled_array[-(k // 2 + 1)])
40+
41+
# Step 5: Final pass to ensure complete sorting
42+
for l in range(1, len(final_array)):
43+
key = final_array[l]
44+
m = l - 1
45+
while m >= 0 and final_array[m] > key:
46+
final_array[m + 1] = final_array[m]
47+
m -= 1
48+
final_array[m + 1] = key
49+
50+
return final_array
51+
52+
# Test the Wave Sort algorithm
53+
arr = [34, 7, 23, 32, 5, 62, 32, 2, 43]
54+
sorted_arr = wave_sort(arr)
55+
print("Original array:", arr)
56+
print("Sorted array using Wave Sort:", sorted_arr)

0 commit comments

Comments
 (0)