几种基本排序

  1.快速排序

  快速排序就是用递归把数组拆分成最小单元在组合起来

  

func FastSort(slice []int) []int {
	if len(slice) <= 1 {
		return slice
	}
	index := len(slice) / 2
	value := slice[index]	
	slice = append(slice[:index], slice[index+1:]...)
	leftSlice := []int{}
	rightSlice := []int{}
	for i := 0; i < len(slice); i++ {
		if slice[i] < value {
			leftSlice = append(leftSlice, slice[i])
		} else {
			rightSlice = append(rightSlice, slice[i])
		}
	}
	s := append(append(FastSort(leftSlice), value), FastSort(rightSlice)...)	
	return s
}

  2.选择排序

  选择排序找出比当前被比较的值还小的值的索引,进行交换

  

func SelectSort(arr []int) []int {
	//从第一个到倒数第二个
	for i := 0; i < len(arr)-1; i++ {
		minIndex := i
		//从i+1开始和i比,直到最后一个
		for j := i + 1; j < len(arr); j++ {
			if arr[minIndex] > arr[j] {
				minIndex = j
			}
		}
		if minIndex != i {
			arr[minIndex], arr[i] = arr[i], arr[minIndex]
		}
	}
	return arr
}

  3.冒泡排序

  用第n个和n+1进行比较,进行n轮

 

func BubbleSort(slice []int) []int {
	for i := 0; i < len(slice)-1; i++ {
		for j := 0; j < len(slice)-1-i; j++ {
			if slice[j+1] < slice[j] {
				slice[j+1], slice[j] = slice[j], slice[j+1]
			}
		}
	}
	return slice
}

  4.插入排序

  用i+1个往前和i对比,只要i+1小于i,并且i>0就一直交换下去

func InsertSort(arr []int) []int {
	for i := 0; i < len(arr)-1; i++ {
		for j := i + 1; j > 0 && arr[j-1] > arr[j]; j-- {
			arr[j-1], arr[j] = arr[j], arr[j-1]
		}
	}
	return arr
}

  5.希尔排序

  希尔排序是插入排序的另一个版本,每次跨度不只是1

func ShellSort(slice []int) []int {
	for i := len(slice) / 2; i > 0; i /= 2 {
		for j := i; j < len(slice); j++ {
			for k := j; k-i >= 0 && slice[k] < slice[k-i]; k -= i {
				slice[k], slice[k-i] = slice[k-i], slice[k]
			}
		}
	}
	return slice
}

  

posted @ 2021-03-06 13:09  nextYearToday  阅读(56)  评论(0)    收藏  举报