diff --git a/.gitignore b/.gitignore index 9e1f75c..e4419f3 100644 --- a/.gitignore +++ b/.gitignore @@ -31,4 +31,5 @@ sorting/gnome_sort sorting/quick_sort sorting/comb_sort sorting/odd_even_sort -sorting/heap_sort \ No newline at end of file +sorting/heap_sort +sorting/counting_sort diff --git a/README.md b/README.md index 8da6d19..9e69dbd 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,11 @@ alghoritms * comb sort * odd/even sort * heap sort + * counting sort + +#### Searching + +#### Data structures contribution ------------ diff --git a/sorting/counting_sort.go b/sorting/counting_sort.go new file mode 100644 index 0000000..be735ca --- /dev/null +++ b/sorting/counting_sort.go @@ -0,0 +1,52 @@ +package main + +/* + * Counting sort - https://en.wikipedia.org/wiki/Counting_sort + */ + +import "fmt" + +import "github.com/0xAX/go-algorithms" + +func getK(arr []int) int { + if len(arr) == 0 { + return 1 + } + + k := arr[0] + + for _, v := range arr { + if v > k { + k = v + } + } + + return k+1 +} + +func main(){ + arr := utils.RandArray(10) + fmt.Println("Initial array is:", arr) + fmt.Println("") + + k := getK(arr) + array_of_counts := make([]int, k) + + for i:= 0; i < len(arr); i++ { + array_of_counts[arr[i]] += 1 + } + + for i, j := 0, 0; i < k; i++ { + for { + if array_of_counts[i] > 0 { + arr[j] = i + j += 1 + array_of_counts[i] -= 1 + continue + } + break + } + } + + fmt.Println("Sorted array is: ", arr) +}