golang排序算法(选择、插入、冒泡、快速排序)

假设从小到大排序

1.选择排序

基本原理:
对于给定的一组记录,经过第一轮比较后得到最小记录,然后将该记录与第一个记录的位置交换;接着对不包括第一个记录以外的其他记录进行第二次比较,得到的最小记录与第二个记录进行位置交换;重复该过程,直到进行比较的记录只有一个时为止。以数组{2,4,3,1,7,9,5,6}为例:
第一轮排序后:1{2,4,3,7,9,5,6}
第二轮排序后:1,2{4,3,7,9,5,6}
第三轮排序后:1,2,3{4,7,9,5,6}
第四轮排序后:1,2,3,4{7,9,5,6}

最后排序结果:{1,2,3,4,5,6,7,9}
代码如下:

package main

import "fmt"

func main() {
	var arr = []int{2, 4, 3, 1, 7, 9, 5, 6}
	selectionSort(arr)
	fmt.Println(arr)
}
func selectionSort(arr []int) {
	var minValue,minIndex int
	for i := 0; i < len(arr); i++ {
		minIndex=i
		minValue = arr[i]
		for j := i + 1; j < len(arr); j++ {
			
			if arr[j] < minValue {
				minValue = arr[j]
				minIndex=j
				if minIndex!=i {
					arr[minIndex]=arr[i]
					arr[i]=minValue
				}
			}
		}
	}

}

程序运行结果为:

[1 2 3 4 5 6 7 9]

2.插入排序

思路:
对于给定的一组记录,初始时假设第一个记录自成一个有序序列,其余的记录为无序序列。接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直到最后一个记录插入到有序序列中为止。以数组{2,4,3,1,7,9,5,6}为例:
第一步插入2后:2{4,3,1,7,9,5,6}
第二步插入4后:2,4{3,1,7,9,5,6}
第三步插入3后:2,3,4{1,7,9,5,6}
第四步插入1后:1,2,3,4{7,9,5,6}
第五步插入7后:1,2,3,4,7{9,5,6}
第六步插入9后:1,2,3,4,7,9{5,6}
第七步插入5后:1,2,3,4,5,7,9{6}
第八步插入6后:1,2,3,4,5,6,7,9
代码如下:

package main

import "fmt"

func main() {
	var arr = []int{2, 4, 3, 1, 7, 9, 5, 6}
	insertSort(arr)
	fmt.Println(arr)
}
func insertSort(arr []int){
	if arr ==nil{
		return
	}
	var j,temp int
	for i:=1;i<len(arr);i++{
		if arr[i-1]>arr[i]{
			temp=arr[i]
			j=i-1
			for ;j>=0&&arr[j]>temp;j--{
				arr[j+1]=arr[j]
			}
			arr[j+1]=temp
		}

	}
}

程序运行结果为:

[1 2 3 4 5 6 7 9]

3.冒泡排序

思路:
对于给定的n个记录,从第一个记录开始依次对相邻的两个记录进行比较,当前面的记录大于后面的记录时,交换其位置,进行一轮比较和换位后,n个记录中最大记录将位于第n位;然后对前(n-1)个记录进行第二轮比较;重复该过程,直到进行比较的记录只剩下一个时为止,整个过程就像气泡一样上升。以数组{2,4,3,1,7,9,5,6}为例:
第一轮排序后:{2,4,3,1,7,5,6} 9
第二轮排序后:{2,4,3,1,5,6} 9,7
第三轮排序后:{2,4,3,1,5} 9,7,6
第四轮排序后:{2,4,3,1} 9,7,6,5

最后排序结果:{1,2,3,4,5,6,7,9}
代码如下:

package main

import "fmt"

func main() {
	var arr = []int{2, 4, 3, 1, 7, 9, 5, 6}
	bubbleSort(arr)
	fmt.Println(arr)
}
func bubbleSort(arr []int){
	var temp int
	for i:=0;i<len(arr)-1;i++{
		for j:=len(arr)-1;j>i;j--{
			if arr[j]<arr[j-1]{
				temp=arr[j]
				arr[j]=arr[j-1]
				arr[j-1]=temp
			}
		}
	}
}

程序运行结果为:

[1 2 3 4 5 6 7 9]

4.快速排序

快速排序是一种非常高效的排序方法,它采用分而治之的方法,把大的拆分为小的,小的再拆分为更小的。
思路:
对于一组给定的记录,通过一轮排序后,将原序列分为两部分,其中前一部分的所有记录均比后一部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均有序为止。
代码如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值