Go语言实现冒泡
冒泡排序,按从小到大排列,循环一次比较两个相邻两个数的大小,然后交换,循环一次即可找出最大的一个数并防在最后一位
时间复杂度:平均复杂度是:(O)n^2,最好:(O)n,最坏:(O)n^2
空间复杂度:(O)1
稳定性:稳定
代码实现:
package main
import "fmt"
func main(){
a := []int{3,2,1,5,6,8,9,0,4,7,1,3,4,6,0,1}
popSort3(a)
}
func popSort(a []int){
for i:=1;i<len(a);i++{
for j:=0;j<len(a)-i;j++{
if a[j] > a[j+1]{ //冒泡排序是属于稳定排序,这里不能是>=,否则会变成不稳定
a[j],a[j+1]=a[j+1],a[j]
}
}
}
fmt.Println(a)
}
func popSort1(a []int){
for i:=1;i<len(a);i++{
sorted := true
for j:=0;j<len(a)-i;j++{
if a[j] > a[j+1]{ //冒泡排序是属于稳定排序,这里不能是>=,否则会变成不稳定
a[j],a[j+1]=a[j+1],a[j]
sorted = false //前面的数据都是排好了序的则不会进来,后面的循环就可以直接跳出
}
}
if sorted {
break
}
}
fmt.Println(a)
}
func popSort2(a []int){
for i:=1;i<len(a);i++{
index := 0
for j:=0;j<len(a)-i;j++{
if a[j] > a[j+1]{ //冒泡排序是属于稳定排序,这里不能是>=,否则会变成不稳定
a[j],a[j+1]=a[j+1],a[j]
index = j //如果尾部的已经是排好序了,我们可以跳掉尾部已经排好的那几次循环
}
}
i = len(a)-index-1
}
fmt.Println(a)
}
func popSort3(a []int){
for i:=1;i<len(a);i++{
index := 0
sorted := true
for j:=0;j<len(a)-i;j++{
if a[j] > a[j+1]{ //冒泡排序是属于稳定排序,这里不能是>=,否则会变成不稳定
a[j],a[j+1]=a[j+1],a[j]
index = j //如果尾部的已经是排好序了,我们可以跳掉尾部已经排好的那几次循环
sorted = false
}
}
i = len(a)-index-1
if sorted {
break
}
}
fmt.Println(a)
}