排序、查找

排序、查找

1.快排

img

/*
快排
*/
func quickSort(li []int, left, right int) []int {
	if left < right {
		mid := paitition(li, left, right)
		quickSort(li, left, mid-1)
		quickSort(li, mid+1, right)
	}
	return li
}

func paitition(li []int, left, right int) int {
	temp := li[left]
	for left < right {
		if left < right && li[right] >= temp {
			right -= 1
		}
		li[left] = li[right]
		if left < right && li[left] <= temp {
			left += 1
		}
		li[right] = li[left]
	}
	li[left] = temp
	return left
}

func main() {
	li := []int{3, 2, 1, 6, 5, 4}
	quickSort(li, 0, len(li)-1)
	fmt.Println(li)
}

2.冒泡

'''
原数据:9, 8, 7, 1, 2
第一趟:8,7,1,2,9
第二趟:7,1,2,8,9
第三趟:1,2,7,8,9
第四趟:1,2,7,8,9
'''
/*
冒泡
*/
func maopao(li []int) {
	for i := 0; i < len(li); i++ {
		for j := i; j < len(li); j++ {
			if li[i] > li[j] {
				li[i], li[j] = li[j], li[i]
			}
		}
	}
}

3.二分查找

//二分查找
func binSearch(li []int, target, left, right int) int {
	mid := (left + right) / 2
	if li[mid] == target {
		return mid
	} else if li[mid] > target {
		//target在左边
		return binSearch(li, target, left, mid-1)
	} else {
		//target在右边
		return binSearch(li, target, mid+1, right)
	}
}

func main() {
	li := []int{1, 2, 3, 4, 5, 6, 7}
	n := binSearch(li, 3, 0, len(li)-1)
	fmt.Println(n)
}

posted @ 2024-01-27 23:07  Jeff的技术栈  阅读(3)  评论(0编辑  收藏  举报
回顶部