排序、查找
排序、查找
1.快排
/*
快排
*/
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)
}
选择了IT,必定终身学习