mergesort

来源:互联网 发布:java中interrupt用法 编辑:程序博客网 时间:2024/05/22 00:54
package mainimport "fmt"func merge(values[]int , left,mid,right int){    leftbegin,leftend,rightbegin,rightend:=left,mid,mid+1,right    sorted:=make([]int,(right-left)+1)    index:=0        fmt.Println("begin===============")        fmt.Println("leftbegin: ",leftbegin,"leftend: ",leftend,"rightbegin: ",rightbegin,"rightend: ",rightend)    for (leftbegin<=leftend && rightbegin<=rightend){                fmt.Println("entering for")        if values[leftbegin]<values[rightbegin]{            fmt.Println("if,,, ","index: ",index,"values[leftbegin]: ",values[leftbegin])                        sorted[index]=values[leftbegin]                        leftbegin++            index++        }else {            fmt.Println("else,,, ","index: ",index," ",values[rightbegin])            sorted[index]=values[rightbegin]            rightbegin++            index++        }        fmt.Println("sorted: ",sorted)           }        fmt.Println("leftbegin: ",leftbegin,"leftend: ",leftend,"rightbegin: ",rightbegin,"rightend: ",rightend,"index: ",index)    for leftbegin<=leftend{                fmt.Println("leftbegin<leftend ","index: ",index)        fmt.Println("sorted: ",sorted)               sorted[index]=values[leftbegin]        leftbegin++        index++    }     for rightbegin<=rightend{                fmt.Println("rightbegin<rightend ","index: ",index)        fmt.Println("sorted: ",sorted)               sorted[index]=values[rightbegin]        rightbegin++        index++     }          fmt.Println(sorted)     i:=0     for i<index{         values[left]=sorted[i]         left++         i++     }     fmt.Println("sorted: ",sorted)            fmt.Println("end")}func MergeSort(values[]int, left, right int){    fmt.Println("mergesort *******************")    fmt.Println("left:",left,"right:",right)        if left<right{        mid:=(right-left)/2+left                fmt.Println("mergesort left *******************")        fmt.Println("left:",left,"mid:",mid)                MergeSort(values,left,mid)                fmt.Println("mergesort right *******************")        fmt.Println("mid+1:",mid+1,"right:",right)                MergeSort(values,mid+1,right)                merge(values,left,mid,right)                fmt.Println(values)    }}func main(){    values:=[]int{12,6,4,7,2,3}    MergeSort(values,0,len(values)-1)    fmt.Println(values)}