Golang Shell Sort Algorithm

The shell sort algorithm sorts a pair of elements that are not in sequence in a collection. The distance between the elements to be compared is decreased sequentially. This algorithm performs more operations and has a greater cache miss ratio than the quick sort algorithm.

Golang Shell Sort Algorithm Implementation

In the following code, we can see the implementation of the shell sort algorithm. The ShellSorter function takes an integer array as a parameter and sorts it:

package main// importing fmt and bytes packageimport ("fmt")// shell sorter methodfunc ShellSorter(elements []int) {var (n         = len(elements)intervals = []int{1}k         = 1)for {var interval intinterval = power(2, k) + 1if interval > n-1 {break}intervals = append([]int{interval}, intervals...)k++}var interval intfor _, interval = range intervals {var i intfor i = interval; i< n; i += interval {var j intj = ifor j > 0 {if elements[j-interval] > elements[j] {elements[j-interval], elements[j] = elements[j], elements[j-interval]}j = j - interval}}}}//power functionfunc power(exponent int, index int) int {var power intpower = 1for index > 0 {if index&1 != 0 {power *= exponent}index >>= 1exponent *= exponent}return power}// main methodfunc main() {var elements []intelements = []int{34, 202, 13, 19, 6, 5, 1, 43, 506, 12, 20, 28, 17, 100, 25, 4, 5, 97, 1000, 27}fmt.Println("\n^^^^^^ Before Sorting ^^^ \n\n", elements)ShellSorter(elements)fmt.Println(elements)fmt.Println("\n--- After Sorting ---\n\n", elements)}

Output:

^^^^^^ Before Sorting ^^^  [34 202 13 19 6 5 1 43 506 12 20 28 17 100 25 4 5 97 1000 27][1 4 5 5 6 12 13 17 19 20 25 27 28 34 43 97 100 202 506 1000]--- After Sorting --- [1 4 5 5 6 12 13 17 19 20 25 27 28 34 43 97 100 202 506 1000]

Comments