排序算法
快排
func sortArray(nums []int) []int {
QuicklySort(nums,0,len(nums)-1)
return nums
}
func QuicklySort(src []int,low,high int){
if low<high{
pos:=Partition(src,low,high)
QuicklySort(src,low,pos-1)
QuicklySort(src,pos+1,high)
}
}
func Partition(src []int,low,high int)int{
value:=src[low]
for low<high{
for low<high&&src[high]>value{
high--
}
src[low]=src[high]
for low<high&&src[low]<value{
low++
}
src[high]=src[low]
}
src[low]=value
return low
}
冒泡
func swap(nums []int,i,j int){
temp:=nums[i]
nums[i]=nums[j]
nums[j]=temp
}
func BubbleSort(nums []int){
for i:=0;i<len(nums)-1;i++{
for j:=len(nums)-1;j>i;j--{
if nums[j]<nums[j-1]{
swap(nums,j,j-1)
}
}
}
}
二路归并
func Merge(left,right []int)[]int{
total:=len(left)+len(right)
res:=make([]int,total)
var l,r,i int
for l<len(left)&&r<len(right){
if left[l]<=right[r]{
res[i]=left[l]
l++
}else{
res[i]=right[r]
r++
}
i++
}
copy(res[i:],left[l:])
copy(res[i+len(left)-l:],right[r:])
return res
}
func MergeSort(nums []int)[]int{
if len(nums)<=1{
return nums
}
mid := len(nums)/2
left:=MergeSort(nums[:mid])
right:=MergeSort(nums[mid:])
return Merge(left,right)
}