golang实现各种排序

25 篇文章 1 订阅
1 篇文章 0 订阅

Python实现排序:力扣

Golang实现

一、冒泡排序

详细思路参考:三分钟彻底理解冒泡排序 - stone1234567890 - 博客园

//冒泡
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(arr1 []int,arr2 []int)[]int{
	if arr1==nil && arr2==nil{
		return nil
	}
	if arr1==nil{
		return arr2
	}
	if arr2==nil{
		return arr1
	}
	var arr [] int  //保存合并后的数组
	
	point1:=len(arr1)
	point2:=len(arr2)
	
	i := 0
	j := 0

	for i<point1 && j<point2{
		if arr1[i]>arr2[j]{
			arr=append(arr,arr2[j])
			j++
		} else{
			arr=append(arr,arr1[i])
			i++
		}
	}

	fmt.Println(i,j)   //7,8
	fmt.Println(arr1[i-1],arr2[j])   //91,99

	arr=append(arr,arr1[i:]...)
	arr=append(arr,arr2[j:]...)
	return arr
}

func main(){
	arr1:=[]int{-3,3,6,8,16,90,91}
	arr2:=[]int{-4,0,3,8,16,17,25,76,99,187,200}

	result=merge(arr1,arr2)
	fmt.Println(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
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值