package main
import (
"fmt"
)
// Comparison based sorting: Bubble Sort
func bubbleSort(arr []int) {
for i := 0; i < len(arr)-1; i++ {
for j := 0; j < len(arr)-1-i; j++ {
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j] // swap
}
}
}
}
// Non comparison based sorting: Counting Sort (for positive integers)
func countingSort(arr []int) []int {
max := 0
for _, v := range arr {
if v > max {
max = v
}
}
count := make([]int, max+1)
for _, v := range arr {
count[v]++ // count occurrences
}
sorted := []int{}
for i, c := range count {
for c > 0 {
sorted = append(sorted, i) // add i c times
c--
}
}
return sorted
}
func main() {
arr := []int{4, 2, 7, 1, 3}
fmt.Println("Original:", arr)
// Comparison based
bubbleSort(arr)
fmt.Println("Comparison based sorted:", arr)
// Non comparison based
arr2 := []int{4, 2, 7, 1, 3}
sorted := countingSort(arr2)
fmt.Println("Non comparison based sorted:", sorted)
}
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
compare adjacent elements and swap if out of order
count occurrences of each value
for i, c := range count {
for c > 0 {
sorted = append(sorted, i)
c--
}
collect values from count array in order to build sorted list
Original: [4 2 7 1 3]
Comparison based sorted: [1 2 3 4 7]
Non comparison based sorted: [1 2 3 4 7]