# Shell sort in C++

In computer science, sorting algorithms are frequently used to arrange data in a specific order. There are many kinds of sorting algorithms, and each has advantages and disadvantages of its own. The Shell sort is one of the most widely used sorting algorithms, sometimes referred to as the declining increment sort. In this blog post, we'll talk about the Shell sort algorithm and how to use C++ to build it.

An array is sorted using the shell sort method, which compares far-away entries rather than adjacent ones. The procedure begins by employing a gap sequence to split the array into smaller subarrays, also referred to as h-sorted arrays. The gaps between the elements that will be compared are represented by the gap sequence, which is a collection of numbers. The Knuth sequence is typically used to calculate the gap sequence, which is determined by the formula 3k - 1, where k is an integer.

After that, the algorithm conducts an insertion sort on each subarray after it has constructed the subarrays. Each insertion sort is a straightforward sorting algorithm that checks each element's position in relation to its neighbours and swaps them if necessary. Each subarray does an insertion sort, starting with the gap with the greatest size and gradually narrowing it until it equals 1. The algorithm now conducts a final insertion sort on the entire array to make sure that all of the elements are in the right order.

The algorithm has the name of Donald Shell, who developed it and originally suggested it in 1959. Now that we are familiar with the fundamentals of Shell sort, let's look at how to use C++ to implement it. There are three basic steps in the implementation:

1. Using the gap sequence as a guide, divide the array into subarrays.
2. Perform an insertion sort on each subarray.
3. Execute a final insertion sort on the entire array after reducing the gap until it equals 1.

### Example:

Let's examine the Shell sort algorithm's C++ source code.

Output:

The output of the above code is:

```Sorted array: 1 2 3 4 5 6 7 8 9
```

Explanation:

In the above code, we determine the gap sequence first using the array's size. Starting with a n/2 gap sequence, we cut the gap in half until it is just 1. After that, starting from the gap and working our way to the end of the array, we perform an insertion sort on each subarray. Instead of comparing nearby components, the insertion sort compares elements that are spaced apart by gaps.

## Conclusion

In this blog post, we discussed about the Shell sort algorithm and its C++ implementation. An array is sorted using the quick and effective shell sort method, which compares far-off elements rather than nearby ones. The procedure begins by employing a gap sequence to split the array into smaller subarrays, after which each subarray is subjected to an insertion sort. The Knuth sequence is used to calculate the gap sequence, which is represented by 3k - 1. After decreasing the gap until it equals 1, the algorithm does a final insertion sort on the entire array.

This blog post's code example can easily be changed to sort arrays of different data types or in a different order (for example, in descending order). The Pratt and Tokuda sequences for creating the gap sequences are two further variants of the Shell sort method that might be investigated. Shell sort is a well-liked sorting algorithm because it is straightforward and effective, and it is a popular choice for sorting small to medium-sized arrays in practice.