四种排序算法与二分查找

Posted wujuntian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四种排序算法与二分查找相关的知识,希望对你有一定的参考价值。

1. 冒泡排序

func BubbleSort(slice []int) []int 
	i, j, okay, count := 0, 0, true, len(slice)
	for i = 0; i < count-1; i++  //最多需要进行count-1轮比较
		okay = true
		for j = 0; j < count-i-1; j++  //每一轮比较的逻辑
			if slice[j] > slice[j+1] 
				slice[j], slice[j+1] = slice[j+1], slice[j]
				okay = false
			
		
		if okay  //当轮比较没有发生位置交换,说明已经排序完成,可提前退出循环
			break
		
	
	return slice

 

2. 插入排序

func InsertSort(slice []int) []int 
	var i, j int
	count := len(slice)
	for i = 1; i < count; i++ 
		for j = i; j > 0; j--  //通过比较,找插入位置
			if slice[j-1] > slice[j] 
				slice[j-1], slice[j] = slice[j], slice[j-1]
			 else  //当前元素已找到插入位置,退出循环
				break
			
		
	
	return slice

  

3. 选择排序

func SelectSort(slice []int) []int 
	var i, j, minKey int
	count := len(slice)
	for i = 0; i < count-1; i++ 
		minKey = i
		for j = i + 1; j < count; j++  //找最小数位置
			if slice[minKey] > slice[j] 
				minKey = j
			
		
		if minKey != i 
			slice[minKey], slice[i] = slice[i], slice[minKey]
		
	
	return slice

  

4. 快速排序

func QuickSort(slice []int, start, end int) 
	if start >= end 
		return
	
	i, j := start, end
	val := slice[(i+j)/2]
	for i <= j 
		for i <= end && slice[i] < val 
			i++
		
		for j >= start && slice[j] > val 
			j--
		
		if i <= j 
			slice[i], slice[j] = slice[j], slice[i]
			i++
			j--
		
	

	if start < j 
		QuickSort(slice, start, j)
	
	if end > i 
		QuickSort(slice, i, end)
	

  

5. 二分查找

func BinarySearch(slice []int, head, tail, value int) int 
	if head > tail 
		return -1
	
	middle := (head + tail) / 2
	if slice[middle] == value 
		return middle
	 else if slice[middle] < value 
		return BinarySearch(slice, middle+1, tail, value)
	 else 
		return BinarySearch(slice, head, middle-1, value)
	

  

以上是关于四种排序算法与二分查找的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 算法---二分查找与冒泡排序

二分查找与快速排序算法

Java八股文面试题 基础篇 -- 二分查找算法冒泡排序选择排序插入排序希尔排序快速排序

Java八股文面试题 基础篇 -- 二分查找算法冒泡排序选择排序插入排序希尔排序快速排序

二分查找算法 四种题型六道题目总结,从此二分不迷路!

转载 | 二分查找算法 四种题型六道题目总结,从此二分不迷路!