func BubbleSort ( arr [ ] int ) {
for i := 0 ; i < len ( arr) ; i++ {
for j := 0 ; j < len ( arr) - 1 ; j++ {
if arr[ j] > arr[ j+ 1 ] {
arr[ j] , arr[ j+ 1 ] = arr[ j+ 1 ] , arr[ j]
}
}
}
}
func SelectSortData ( arr [ ] int ) {
for i := 0 ; i < len ( arr) ; i++ {
min := i
for j := i + 1 ; j < len ( arr) ; j++ {
if arr[ min] > arr[ j] {
min = j
}
}
if min != i {
arr[ min] , arr[ i] = arr[ i] , arr[ min]
}
}
}
func InsertSort ( arr [ ] int ) {
for i := 1 ; i < len ( arr) ; i++ {
backup := arr[ i]
j := i - 1
for j >= 0 && backup < arr[ j] {
arr[ j+ 1 ] = arr[ j]
j--
}
arr[ j+ 1 ] = backup
}
}
func QuickSort ( arr [ ] int ) [ ] int {
if len ( arr) <= 1 {
return arr
}
capData := arr[ 0 ]
gt := [ ] int { }
lt := [ ] int { }
mid := [ ] int { capData}
for i := 1 ; i < len ( arr) ; i++ {
if capData > arr[ i] {
lt = append ( lt, arr[ i] )
} else if capData < arr[ i] {
gt = append ( gt, arr[ i] )
} else {
mid = append ( mid, arr[ i] )
}
}
lt, gt = QuickSort ( lt) , QuickSort ( gt)
sorted := append ( append ( lt, mid... ) , gt... )
return sorted
}
func HeapSort ( arr [ ] int ) [ ] int {
lenght := len ( arr)
for i := 0 ; i < lenght; i++ {
lastLen := lenght - i
HeapSortMax ( arr, lastLen)
if i < lenght {
arr[ 0 ] , arr[ lastLen- 1 ] = arr[ lastLen- 1 ] , arr[ 0 ]
}
}
return arr
}
func HeapSortMax ( arr [ ] int , lenght int ) [ ] int {
depth := lenght/ 2 - 1
for i := depth; i >= 0 ; i-- {
topMax := i
leftchild := 2 * i + 1
rightchild := 2 * i + 2
if leftchild <= lenght- 1 && arr[ leftchild] > arr[ topMax] {
topMax = leftchild
}
if rightchild <= lenght- 1 && arr[ rightchild] > arr[ topMax] {
topMax = rightchild
}
if topMax != i {
arr[ i] , arr[ topMax] = arr[ topMax] , arr[ i]
}
}
return arr
}
func OddEven ( arr [ ] int ) [ ] int {
isSorted := false
for isSorted == false {
isSorted = true
for i := 1 ; i < len ( arr) - 1 ; i += 2 {
if arr[ i] > arr[ i+ 1 ] {
arr[ i] , arr[ i+ 1 ] = arr[ i+ 1 ] , arr[ i]
isSorted = false
}
}
for i := 0 ; i < len ( arr) - 1 ; i += 2 {
if arr[ i] > arr[ i+ 1 ] {
arr[ i] , arr[ i+ 1 ] = arr[ i+ 1 ] , arr[ i]
isSorted = false
}
}
}
return arr
}
func MergerSort ( arr [ ] int ) [ ] int {
if len ( arr) <= 1 {
return arr
}
lenght := len ( arr)
mid := lenght / 2
leftarr := MergerSort ( arr[ : mid] )
rightarr := MergerSort ( arr[ mid: ] )
return merger ( leftarr, rightarr)
}
func merger ( left [ ] int , right [ ] int ) [ ] int {
leftIndex := 0
rightIndex := 0
lastArr := [ ] int { }
for leftIndex < len ( left) && rightIndex < len ( right) {
if left[ leftIndex] < right[ rightIndex] {
lastArr = append ( lastArr, left[ leftIndex] )
leftIndex++
} else if left[ leftIndex] > right[ rightIndex] {
lastArr = append ( lastArr, right[ rightIndex] )
rightIndex++
} else {
lastArr = append ( lastArr, left[ leftIndex] )
lastArr = append ( lastArr, right[ rightIndex] )
leftIndex++
rightIndex++
}
}
if leftIndex < len ( left) {
lastArr = append ( lastArr, left[ leftIndex: ] ... )
}
if rightIndex < len ( right) {
lastArr = append ( lastArr, right[ rightIndex: ] ... )
}
return lastArr
}
func ShellSort ( arr [ ] int ) {
for gap := len ( arr) / 2 ; gap > 0 ; gap /= 2 {
for i := gap; i < len ( arr) ; i++ {
for j := i - gap; j >= 0 ; j -= gap {
if arr[ j] > arr[ j+ gap] {
arr[ j] , arr[ j+ gap] = arr[ j+ gap] , arr[ j]
}
}
}
}
}
package main
import "fmt"
func main ( ) {
var arr [ 3 ] [ ] int
myarr := [ ] int { 1 , 2 , 3 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 3 }
for i := 0 ; i < len ( myarr) ; i++ {
arr[ myarr[ i] - 1 ] = append ( arr[ myarr[ i] - 1 ] , myarr[ i] )
}
fmt. Println ( arr)
}