golang 數據結構實現之內部排序(一)

   直接上代碼:

package sort
   
//直接插入排序
func DirectInsertSort(array []int) []int {
    len := len(array)
    var tmp, j int
    for i := 1; i < len; i++ {
        if array[i] < array[i-1] {
            tmp = array[i]
            for j = i - 1; tmp < array[j]; j-- {
                array[j+1] = array[j]
            }
            array[j+1] = tmp
        }
    }
    return array
}
   
//折半插入排序
func BinaryInsertSort(array []int) []int {
    var tmp, low, high, mid int
    len := len(array)
    for i := 1; i < len; i++ {
        tmp = array[i]
        low, high = 0, i-1
        for low <= high {
            mid = (low + high) / 2
            if array[mid] > array[i] {
                high = mid - 1
            } else {
                low = mid + 1
            }
        }
        for j := i - 1; j >= high+1; j-- {
            array[j+1] = array[j]
        }
        array[high+1] = tmp
    }
    return array
}
   
//冒泡排序
func BubbleSort(array []int) []int {
    len := len(array)
    for i := 0; i < len-1; i++ {
        for j := len - 1; j > i; j-- {
            if array[j-1] > array[j] {
                array[j-1], array[j] = array[j], array[j-1]
            }
        }
    }
    return array
}
   
//簡單選擇排序
func SelectSort(array []int) []int {
    len := len(array)
    for i := 0; i < len-1; i++ {
        for j := len + 1; j < len; j++ {
            if array[j-1] > array[j] {
                array[j-1], array[j] = array[j], array[j-1]
            }
        }
    }
    return array
}
   
//快速排序
func QuickSort(array []int) []int {
    quickSort(array, 0, len(array)-1)
    return array
}
   
func quickSort(array []int, left, right int) {
    if left < right {
        pivotPosition := partition(array, left, right)
        quickSort(array, left, pivotPosition-1)
        quickSort(array, pivotPosition+1, right)
    }
}
   
func partition(array []int, left, right int) int {
    pivot := array[left]
    for left < right {
        for left < right && array[right] > pivot {
            right--
        }
        array[left] = array[right]
        for left < right && array[left] <= pivot {
            left++
        }
        array[right] = array[left]
    }
   
    array[left] = pivot
    return left
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章