快速排序算法 二分查找 golang

91 阅读1分钟
package main

import "fmt"

func main() {
   testArr := []int{2, 5, 3, 7, 4, 5, 8, 1, 4, 0}
   fmt.Println(testArr)
   quickSort(testArr, 0, len(testArr)-1)
   fmt.Println(testArr)
}
func quickSort(arr []int, L, R int) {
   flag := L
   left := L
   right := R

   if L >= R {
      return
   }
   // 将大于arr[flag]的都放在右边,小于的,都放在左边
   for L < R {
      // 如果flag从左边开始,那么是必须先从有右边开始比较,也就是先在右边找比flag小的
      for L < R {
         if arr[R] >= arr[flag] {
            R--
            continue
         }
         // 交换数据
         arr[R], arr[flag] = arr[flag], arr[R]
         flag = R
         break
      }
      for L < R {
         if arr[L] <= arr[flag] {
            L++
            continue
         }
         arr[L], arr[flag] = arr[flag], arr[L]
         flag = L
         break
      }
   }

   quickSort(arr, left, flag-1)
   quickSort(arr, flag+1, right)
}
二分排序
func binary_search(arr []int, key int) int {
   var result int
   var mid int
   var low = 0
   var high = len(arr) - 1

   for low < high {
      mid = (low + high) / 2

      if arr[mid] > key {
         high = mid - 1
      } else if arr[mid] < key {
         low = mid + 1
      } else if arr[mid] == key {
         result = mid
         break
      }
   }
   return result
}

func main() {
   var arr = []int{1, 2, 3, 5, 7, 8, 9, 10}
   i := binary_search(arr, 9)
   fmt.Println("查找到的值:", i)
}