creating alghorithm
This commit is contained in:
52
insertion_sort_decreasing.py
Normal file
52
insertion_sort_decreasing.py
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
def insertion_sort_decreasing(arr):
|
||||||
|
sorted_arr = arr.copy()
|
||||||
|
for i in range(1, len(sorted_arr)):
|
||||||
|
current_element = sorted_arr[i]
|
||||||
|
j = i - 1
|
||||||
|
while j >= 0 and sorted_arr[j] < current_element:
|
||||||
|
sorted_arr[j + 1] = sorted_arr[j]
|
||||||
|
j -= 1
|
||||||
|
sorted_arr[j + 1] = current_element
|
||||||
|
return sorted_arr
|
||||||
|
|
||||||
|
|
||||||
|
def insertion_sort_decreasing_inplace(arr):
|
||||||
|
for i in range(1, len(arr)):
|
||||||
|
current_element = arr[i]
|
||||||
|
j = i - 1
|
||||||
|
while j >= 0 and arr[j] < current_element:
|
||||||
|
arr[j + 1] = arr[j]
|
||||||
|
j -= 1
|
||||||
|
arr[j + 1] = current_element
|
||||||
|
return arr
|
||||||
|
|
||||||
|
|
||||||
|
def print_array(arr, label="Array"):
|
||||||
|
print(f"{label}: {arr}")
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print("Insertion Sort Algorithm - Decreasing Order")
|
||||||
|
print("=" * 50)
|
||||||
|
test_arrays = [
|
||||||
|
[5, 2, 8, 1, 9, 3],
|
||||||
|
[1, 2, 3, 4, 5], # Already sorted in ascending order
|
||||||
|
[5, 4, 3, 2, 1], # Already sorted in descending order
|
||||||
|
[1], # Single element
|
||||||
|
[], # Empty array
|
||||||
|
[3, 3, 3, 3], # All same elements
|
||||||
|
[64, 34, 25, 12, 22, 11, 90]
|
||||||
|
]
|
||||||
|
for i, test_arr in enumerate(test_arrays, 1):
|
||||||
|
print(f"\nTest Case {i}:")
|
||||||
|
print_array(test_arr, "Original")
|
||||||
|
sorted_arr = insertion_sort_decreasing(test_arr)
|
||||||
|
print_array(sorted_arr, "Sorted (decreasing)")
|
||||||
|
print_array(test_arr, "Original (unchanged)")
|
||||||
|
test_arr_copy = test_arr.copy()
|
||||||
|
insertion_sort_decreasing_inplace(test_arr_copy)
|
||||||
|
print_array(test_arr_copy, "In-place sorted")
|
||||||
|
print("-" * 30)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user