//冒泡排序(从小到大)funcBubbleSort(nums []int){//冒泡遍历for i :=0; i <len(nums); i++{for j :=0; j <len(nums)-1-i; j++{if nums[j]> nums[j+1]{
nums[j+1], nums[j]= nums[j], nums[j+1]}}}return}
2. 归并排序
排序算法
平均时间复杂度
空间复杂度
排序方式
稳定性
归并排序
O(n log n)
O(n)
Out-Place
稳定
funcMergeSort(nums []int)[]int{//当给定数列长度小于2,则直接返回该数组iflen(nums)<2{return nums
}//将该数组分成两半
left := nums[0:len(nums)/2]
right := nums[len(nums)/2:]//在各自的一半数组内进行排序returnMerge(MergeSort(left),MergeSort(right))}//归并排序funcMerge(left []int, right []int)[]int{//申明变量用于存放结果值var result []int//当左边数列和右边数列都不为空时,比较相同位置元素大小,并放进结果切片中forlen(left)!=0&&len(right)!=0{if left[0]<= right[0]{
result =append(result, left[0])//删除数组第一个元素
left = left[1:]}else{
result =append(result, right[0])//删除数组第一个元素
right = right[1:]}}//当左数组不为0,右数组为0时,只对左数组做存储操作forlen(left)!=0{
result =append(result, left[0])//删除数组第一个元素
left = left[1:]}//当左数组为0,右数组不为0时,只对右数组做存储操作forlen(right)!=0{
result =append(result, right[0])//删除数组第一个元素
right = right[1:]}return result
}
IntNums :=[]int{2,4,3,5,7,6,9,8,1,0}
FloatNums :=[]float64{4.2,5.5,12.7,11.2,35.1,98.9,30.5,26.23356,3.14}
StringNums :=[]string{"a","c","b","z","x","w","y","d","f","i"}//sort.Ints()
sort.Ints(IntNums)//[0 1 2 3 4 5 6 7 8 9]
sort.Sort(sort.Reverse(sort.IntSlice(IntNums)))//[9 8 7 6 5 4 3 2 1 0]//sort.Float64s()
sort.Float64s(FloatNums)//[3.14 4.2 5.5 11.2 12.7 26.23356 30.5 35.1 98.9]
sort.Sort(sort.Reverse(sort.Float64Slice(FloatNums)))//[98.9 35.1 30.5 26.23356 12.7 11.2 5.5 4.2 3.14]//sort.Strings()
sort.Strings(StringNums)//[a b c d f i w x y z]
sort.Sort(sort.Reverse(sort.StringSlice(StringNums)))//[z y x w i f d c b a]//sort.Slice()//排序,传入排序规则
sort.Slice(IntNums,func(i, j int)bool{return IntNums[i]< IntNums[j]})//[0 1 2 3 4 5 6 7 8 9]