基本排序算法(Golang)

前端之家收集整理的这篇文章主要介绍了基本排序算法(Golang)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

冒泡排序

funcBubbleSort(vector[]int){
fmt.Println("BubbleSort")
fmt.Println(vector)
fori:=0;i<len(vector);i++{
tag:=true//为了剪枝
//每一趟将最大的数冒泡
forj:=0;j<len(vector)-i-1;j++{
ifvector[j]>vector[j+1]{/*vector[j]<vector[j+1]*/
temp:=vector[j]
vector[j]=vector[j+1]
vector[j+1]=temp
tag=false
}
}
iftag{
break//0~len(vector)-i没有发生交换说明已经有序
}
fmt.Println(vector)
}
}

插入排序

funcInsertSort(vector[]int){
fmt.Println("InsertSort")
fmt.Println(vector)
fori:=1;i<len(vector);i++{
//每一趟不满足条件就选择i为哨兵保存,将哨兵插入0~i-1有序序列(0~i-1始终是有序的)
ifvector[i]<vector[i-1]{/*vector[i]>vector[i-1]*/
temp:=vector[i]
//后移直到找到哨兵合适的位置
j:=i-1
for;j>=0&&vector[j]>temp;j--{/*vector[j]<temp*/
vector[j+1]=vector[j]
}
//插入位置前后都是有序的,最后也是有序的
vector[j+1]=temp
}
fmt.Println(vector)
}
}

选择排序

funcSelectSort(vector[]int){
fmt.Println("SelectSort")
fmt.Println(vector)
fori:=0;i<len(vector);i++{
//选择最小的元素
k:=i
forj:=i+1;j<len(vector);j++{
ifvector[k]>vector[j]{
k=j
}
}
//交换
ifk!=i{
temp:=vector[i]
vector[i]=vector[k]
vector[k]=temp
}
fmt.Println(vector)
}
}

二元选择排序

funcBinarySelectSort(vector[]int){
fmt.Println("SelectSort")
fmt.Println(vector)
n:=len(vector)
fori:=0;i<n/2;i++{
//选择最小的元素和最大元素
k:=i
t:=n-i-1
forj:=i+1;j<=n-i-1;j++{
ifvector[k]>vector[j]{
k=j
}
ifvector[t]<vector[j]{
t=j
}
}
//交换
ifk!=i{
temp:=vector[i]
vector[i]=vector[k]
vector[k]=temp
}
ift!=n-i-1{
temp:=vector[n-i-1]
vector[n-i-1]=vector[t]
vector[t]=temp
}
fmt.Println(vector)
}
}

快速排序

简单的说快速排序就是挖坑填数然后分治,公认效率最好,这个必须会

funcQuickSort(vector[]int,low,hightint){
	fmt.Println(vector)
	iflow<hight{
		i:=low
		j:=hight
		temp:=vector[low]//开始挖坑填数
		fori<j{
			fori<j&&vector[j]>=temp{
				j--
			}
			vector[i]=vector[j]
			fori<j&&vector[i]<=temp{
				i++
			}
			vector[j]=vector[i]
		}
		vector[i]=temp
		QuickSort(vector,i-1)//分治
		QuickSort(vector,i+1,hight)
	}
}

常见问题,已知序列WAUSTHKO,将第一个数作W为基数,问:

1,第一趟后的序列是多少?假设递归同时进行

1),OAUSTHKW

2),KAHOTSUW

3),HAKOSTUW

4),AHKOSTUW

2,排序过程中那些数会被作为选基数?

以上标记的都是:W,O,K、T,H

3,基数的选择直接影响到效率,同时排序末尾显然有效率问题,可以用其他算法替换。

原文链接:https://www.f2er.com/go/190700.html

猜你在找的Go相关文章