golang實現各種排序

一、冒泡排序

//冒泡
func Bubblesort(arry []int)[]int{
	if arry == nil{
		return nil
	}
	for i:=0;i<len(arry)-1;i++{
		for j:=0;j<len(arry)-i-1;j++{
			if arry[j]>arry[j+1]{
				arry[j],arry[j+1]=arry[j+1],arry[j]
			}
		}
	}
	return arry
}

二、插入排序

//插入
func Insertsort(arr []int)[]int{
	if arr == nil {
		return nil
	}
	var j int
	for i:=1;i<len(arr);i++{
		tmp:=arr[i]
		for j=i;j>0;j--{
			if(tmp < arr[j-1]){
				arr[j] = arr[j-1]
			} else{
				break
			}
		}
		arr[j]=tmp
	}
	return arr
}

三、兩個有序數組的歸併排序

//兩個有序數組的歸併
func Merge(arrs1, arrs2 []int) []int {
	if arrs2 == nil && arrs1 == nil{
		return nil
	}
	if arrs1 == nil{
		return arrs2
	}
	if arrs2 == nil{
		return arrs1
	}
	var result []int   //保存歸併後的數組
	leftLen := len(arrs1) //arrs1得長度
	rightLen := len(arrs2) //arrs2得長度
	lp := 0
	rp := 0
	for lp < leftLen && rp < rightLen{
		if arrs1[lp] > arrs2[rp]{
			result = append(result, arrs2[rp])
			rp++
			continue
		}
		result = append(result, arrs1[lp])
		lp++
	}
	result = append(result, arrs1[lp:]...)   //處理兩個數組不等長的情況
	result = append(result, arrs2[rp:]...)
	fmt.Println(result)
	return result
}

四、快速排序

//快速排序
func partion(arr []int,low ,high int)int{
	val:=arr[low]
	for low<high{
		for low<high && arr[high] >= val{
			high--
		}
		arr[low]=arr[high]
		for low<high && arr[low] <= val{
			low++
		}
		arr[high]=arr[low]
	}
	arr[low]=val
	return low
}
func Quicksort(arr []int,low,high int)[]int {
	par:=partion(arr,low,high)
	if low<par-1{
		Quicksort(arr,low,par-1)
	}
	if high>par+1{
		Quicksort(arr,par+1,high)
	}
	return arr

}

五、選擇排序

//選擇排序
func Selectsort(arr []int)[]int{
	if arr==nil{
		return nil
	}
	var min int    //保存最小值的下標
	for i:=0;i<len(arr)-1;i++{        //趟數
		min = i
		for j:=i+1;j<len(arr);j++{
			if arr[j]<arr[min]{
				min=j
			}
		}
		if min!=i{
			arr[min],arr[i]=arr[i],arr[min]
		}

	}
	return arr
}

 

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