# Python Data Structures and Algorithms : Search and Sorting - Exercises, Practice, Solution

## Data Structures and Algorithms : Search and Sorting [ 23 exercises with solution]

[*An editor is available at the bottom of the page to write and execute the scripts.*]

**1.** Write a Python program for binary search. Go to the editor

Binary Search : In computer science, a binary search or half-interval search algorithm finds the position of a target value within a sorted array. The binary search algorithm can be classified as a dichotomies divide-and-conquer search algorithm and executes in logarithmic time.

*Test Data* :

binary_search([1,2,3,5,8], 6) -> False

binary_search([1,2,3,5,8], 5) -> True

Click me to see the sample solution

**2.** Write a Python program for sequential search. Go to the editor

Sequential Search : In computer science, linear search or sequential search is a method for finding a particular value in a list that checks each element in sequence until the desired element is found or the list is exhausted. The list need not be ordered.

*Test Data* :

Sequential_Search([11,23,58,31,56,77,43,12,65,19],31) -> (True, 3)

Click me to see the sample solution

**3.** Write a Python program for binary search for an ordered list. Go to the editor

*Test Data* :

Ordered_binary_Search([0, 1, 3, 8, 14, 18, 19, 34, 52], 3) -> True

Ordered_binary_Search([0, 1, 3, 8, 14, 18, 19, 34, 52], 17) -> False

Click me to see the sample solution

**4.** Write a Python program to sort a list of elements using the bubble sort algorithm. Go to the editor

Note : According to Wikipedia "Bubble sort, sometimes referred to as sinking sort, is a simple sorting algorithm that repeatedly steps through the list to be sorted, compares each pair of adjacent items and swaps them if they are in the wrong order. The pass through the list is repeated until no swaps are needed, which indicates that the list is sorted. The algorithm, which is a comparison sort, is named for the way smaller elements "bubble" to the top of the list. Although the algorithm is simple, it is too slow and impractical for most problems even when compared to insertion sort. It can be practical if the input is usually in sort order but may occasionally have some out-of-order elements nearly in position."

*Sample Data*: [14,46,43,27,57,41,45,21,70]

*Expected Result*: [14, 21, 27, 41, 43, 45, 46, 57, 70]

Click me to see the sample solution

**5.** Write a Python program to sort a list of elements using the selection sort algorithm. Go to the editor

Note : The selection sort improves on the bubble sort by making only one exchange for every pass through the list.

*Sample Data*: [14,46,43,27,57,41,45,21,70]

*Expected Result*: [14, 21, 27, 41, 43, 45, 46, 57, 70]

Click me to see the sample solution

**6.** Write a Python program to sort a list of elements using the insertion sort algorithm. Go to the editor

Note : According to Wikipedia "Insertion sort is a simple sorting algorithm that builds the final sorted array (or list) one item at a time. It is much less efficient on large lists than more advanced algorithms such as quicksort, heapsort, or merge sort."

*Sample Data*: [14,46,43,27,57,41,45,21,70]

*Expected Result* : [14, 21, 27, 41, 43, 45, 46, 57, 70]

Click me to see the sample solution

**7.** Write a Python program to sort a list of elements using shell sort algorithm. Go to the editor

Note : According to Wikipedia "Shell sort or Shell's method, is an in-place comparison sort. It can be seen as either a generalization of sorting by exchange (bubble sort) or sorting by insertion (insertion sort). The method starts by sorting pairs of elements far apart from each other, then progressively reducing the gap between elements to be compared. Starting with far apart elements can move some out-of-place elements into position faster than a simple nearest neighbor exchange."

Click me to see the sample solution

**8.** Write a Python program to sort a list of elements using the merge sort algorithm. Go to the editor

Note: According to Wikipedia "Merge sort (also commonly spelled mergesort) is an O(n log n) comparison-based sorting algorithm. Most implementations produce a stable sort, which means that the implementation preserves the input order of equal elements in the sorted output."

Click me to see the sample solution

**9.** Write a Python program to sort a list of elements using the quick sort algorithm. Go to the editor

Note: According to Wikipedia "Quicksort is a comparison sort, meaning that it can sort items of any type for which a "less-than" relation (formally, a total order) is defined. Inefficient implementations it is not a stable sort, meaning that the relative order of equal sort items is not preserved. Quicksort can operate in-place on an array, requiring small additional amounts of memory to perform the sorting."

Click me to see the sample solution

**10.** Write a Python program for counting sort. Go to the editor

According to Wikipedia "In computer science, counting sort is an algorithm for sorting a collection of objects according to keys that are small integers; that is, it is an integer sorting algorithm. It operates by counting the number of objects that have each distinct key value, and using arithmetic on those counts to determine the positions of each key value in the output sequence. Its running time is linear in the number of items and the difference between the maximum and minimum key values, so it is only suitable for direct use in situations where the variation in keys is not significantly greater than the number of items. However, it is often used as a subroutine in another sorting algorithm, radix sort, that can handle larger keys more efficiently".

Click me to see the sample solution

**11.** Write a Python code to create a program for Bitonic Sort. Go to the editor

Bitonic Sort: According to rutgers.edu - Bitonic sort is a comparison-based sorting algorithm that can be run in parallel. It focuses on converting a random sequence of numbers into a bitonic sequence, one that monotonically increases, then decreases. Rotations of a bitonic sequence are also bitonic. More specifically, bitonic sort can be modelled as a type of sorting network. The initial unsorted sequence enters through input pipes, where a series of comparators switch two entries to be in either increasing or decreasing order. The algorithm, created by Ken Batcher in 1968, consists of two parts. First, the unsorted sequence is built into a bitonic sequence; then, the series is split multiple times into smaller sequences until the input is in sorted order.

Click me to see the sample solution

**12.** Write a Python program to sort a list of elements using Bogosort sort. Go to the editor

In computer science, Bogosort is a particularly ineffective sorting algorithm based on the generation and test paradigm. The algorithm successively generates permutations of its input until it finds one that is sorted. It is not useful for sorting, but may be used for educational purposes, to contrast it with other more realistic algorithms.
Two versions of the algorithm exist: a deterministic version that enumerates all permutations until it hits a sorted one, and a randomized version that randomly permutes its input. An analogy for the working of the latter version is to sort a deck of cards by throwing the deck into the air, picking the cards up at random, and repeating the process until the deck is sorted. Its name comes from the word bogus.

Click me to see the sample solution

**13.** Write a Python program to sort a list of elements using Gnome sort. Go to the editor

Gnome sort is a sorting algorithm originally proposed by Dr. Hamid Sarbazi-Azad (Professor of Computer Engineering at Sharif University of Technology) in 2000 and called "stupid sort" (not to be confused with bogosort), and then later on described by Dick Grune and named "gnome sort".
The algorithm always finds the first place where two adjacent elements are in the wrong order, and swaps them. It takes advantage of the fact that performing a swap can introduce a new out-of-order adjacent pair only next to the two swapped elements.

Click me to see the sample solution

**14.** Write a Python program to sort a list of elements using Cocktail shaker sort. Go to the editor

From Wikipedia, Cocktail shaker sort,[1] also known as bidirectional bubble sort,[2] cocktail sort, shaker sort (which can also refer to a variant of selection sort), ripple sort, shuffle sort,[3] or shuttle sort, is a variation of bubble sort that is both a stable sorting algorithm and a comparison sort. The algorithm differs from a bubble sort in that it sorts in both directions on each pass through the list. This sorting algorithm is only marginally more difficult to implement than a bubble sort, and solves the problem of turtles in bubble sorts. It provides only marginal performance improvements, and does not improve asymptotic performance; like the bubble sort, it is not of practical interest (insertion sort is preferred for simple sorts), though it finds some use in education.

Click me to see the sample solution

**15.** Write a Python program to sort a list of elements using Comb sort. Go to the editor

The Comb Sort is a variant of the Bubble Sort. Like the Shell sort, the Comb Sort increases the gap used in comparisons and exchanges. Some implementations use the insertion sort once the gap is less than a certain amount. The basic idea is to eliminate turtles, or small values near the end of the list, since in a bubble sort these slow the sorting down tremendously. Rabbits, large values around the beginning of the list do not pose a problem in bubble sort.
In bubble sort, when any two elements are compared, they always have a gap of 1. The basic idea of comb sort is that the gap can be much more than 1.

Click me to see the sample solution

**16.** Write a Python program to sort a list of elements using Cycle sort. Go to the editor

Cycle sort is an in-place, unstable sorting algorithm, a comparison sort that is theoretically optimal in terms of the total number of writes to the original array, unlike any other in-place sorting algorithm. It is based on the idea that the permutation to be sorted can be factored into cycles, which can individually be rotated to give a sorted result.

Click me to see the sample solution

**17.** Write a Python program to sort a list of elements using Heap sort. Go to the editor

In computer science, heapsort (invented by J. W. J. Williams in 1964) is a comparison-based sorting algorithm. Heapsort can be thought of as an improved selection sort: like that algorithm, it divides its input into a sorted and an unsorted region, and it interactively shrinks the unsorted region by extracting the largest element and moving that to the sorted region. The improvement consists of the use of a heap data structure rather than a linear-time search to find the maximum. Although somewhat slower in practice on most machines than a well-implemented quicksort, it has the advantage of a more favorable worst-case O(n log n) runtime. Heapsort is an in-place algorithm, but it is not a stable sort.
A run of the heapsort algorithm sorting an array of randomly permuted values. In the first stage of the algorithm the array elements are reordered to satisfy the heap property. Before the actual sorting takes place, the heap tree structure is shown briefly for illustration.

Click me to see the sample solution

**18.** Write a Python program to sort a list of elements using Pancake sort. Go to the editor

Pancake sorting is the colloquial term for the mathematical problem of sorting a disordered stack of pancakes in order of size when a spatula can be inserted at any point in the stack and used to flip all pancakes above it. A pancake number is the minimum number of flips required for a given number of pancakes. The problem was first discussed by American geometer Jacob E. Goodman. It is a variation of the sorting problem in which the only allowed operation is to reverse the elements of some prefix of the sequence.

Click me to see the sample solution

**19.** Write a Python program to sort a list of elements using Radix sort. Go to the editor

According to Wikipedia "In computer science, radix sort is a non-comparative integer sorting algorithm that sorts data with integer keys by grouping keys by the individual digits which share the same significant position and value".

Click me to see the sample solution

**20.** Write a Python program to sort a list of elements using Selection sort. Go to the editor

According to Wikipedia "In computer science, selection sort is a sorting algorithm, specifically an in-place comparison sort. It has O(n2) time complexity, making it inefficient on large lists, and generally performs worse than the similar insertion sort".

Click me to see the sample solution

**21.** Write a Python program to sort a list of elements using Time sort. Go to the editor

Click me to see the sample solution

**22.** Write a Python program to sort a list of elements using Topological sort. Go to the editor

Click me to see the sample solution

**23.** Write a Python program to sort a list of elements using Tree sort. Go to the editor

Click me to see the sample solution

**Python Code Editor:**

**More to Come !**

**Do not submit any solution of the above exercises at here, if you want to contribute go to the appropriate exercise page.**

## Python: Tips of the Day

**Python: How do I copy a file in Python?**

shutil has many methods you can use. One of which is:

from shutil import copyfile copyfile(src, dst)

- Copy the contents of the file named src to a file named dst.
- The destination location must be writable; otherwise, an IOError exception will be raised.
- If dst already exists, it will be replaced.
- Special files such as character or block devices and pipes cannot be copied with this function.
- With copy, src and dst are path names given as strings.

If you use os.path operations, use copy rather than copyfile. copyfile will only accept strings.

Ref: https://bit.ly/3e2Y1G0

**New Content published on w3resource :**- Python Numpy exercises
- Python GeoPy Package exercises
- Python Pandas exercises
- Python nltk exercises
- Python BeautifulSoup exercises
- Form Template
- Composer - PHP Package Manager
- PHPUnit - PHP Testing
- Laravel - PHP Framework
- Angular - JavaScript Framework
- React - JavaScript Library
- Vue - JavaScript Framework
- Jest - JavaScript Testing Framework