成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go數據結構與算法基礎之快速排序

開發 后端 算法
最近打算重拾算法,從0跟著acwing走一遍,順便用Go實現一下。今天的目標是學習快排,使用Go寫。 學習自acwing。

[[411577]]

本文轉載自微信公眾號「光城」,作者 lightcity 。轉載本文請聯系光城公眾號。

最近打算重拾算法,從0跟著acwing走一遍,順便用Go實現一下。

今天的目標是學習快排,使用Go寫。

學習自acwing。

輸入:

  1. 1 3 2 

輸出:

  1. 1 2 3 

快排思想:

1.定義pivot

2.根據pivot劃分區間

3.遞歸子問題

pivot可以隨機選擇,例如:arr[l]、arr[r] 等等。

當遞歸時有兩種選擇,一種是取j,需要保證pivot不取arr[r],防止死循環。

本文實現用這個:

  1. pivot := arr[(l+r)>>1] 
  2. quickSort(arr, l, j) 
  3. quickSort(arr, j+1, r) 

另一種是取i,需要保證pivot不取arr[l],防止死循環,同時不可以使用 arr[(l+r)>>1]這種,得向上取整,例如:arr[(l+r+1)>>1]。

本文實現用這個:

  1. pivot := arr[(l+r+1)>>1] 
  2. quickSortI(arr, l, i-1) 
  3. quickSortI(arr, i, r) 

最后補充幾個go知識。

1.輸入

go中處理輸入,使用fmt.Scan,將地址傳進去,這里我實現了一個函數,后面可以直接復用。

  1. // DoBlackInput 處理空格輸入為數組 
  2. func DoBlackInput(n int) []int { 
  3.  arr := make([]int, n) 
  4.  for i := 0; i < n; i++ { 
  5.   fmt.Scan(&arr[i]) 
  6.  } 
  7.  return arr 

2.交換

如何快速交換兩個元素。

  1. a, b = b, a 

這樣便可以快速交換了。

3.do...while{}

可以使用:

  1. for { 
  2.     // do something 
  3.     if true { 
  4.       break 
  5.     } 
  6.   } 

4.i++與++i

不支持++i、--i。

最后,完整代碼如下:

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. // DoBlackInput 處理空格輸入為數組 
  6. func DoBlackInput(n int) []int { 
  7.  arr := make([]int, n) 
  8.  for i := 0; i < n; i++ { 
  9.   fmt.Scan(&arr[i]) 
  10.  } 
  11.  return arr 
  12.  
  13. // quickSort 取j 
  14. func quickSort(arr []int, l int, r int) { 
  15.  if l >= r { 
  16.   return 
  17.  } 
  18.  pivot := arr[(l+r)>>1] 
  19.  i := l - 1 
  20.  j := r + 1 
  21.  for i < j { 
  22.   for { 
  23.    i++ 
  24.    if arr[i] >= pivot { 
  25.     break 
  26.    } 
  27.   } 
  28.   for { 
  29.    j-- 
  30.    if arr[j] <= pivot { 
  31.     break 
  32.    } 
  33.   } 
  34.   if i < j { 
  35.    arr[i], arr[j] = arr[j], arr[i] 
  36.   } 
  37.  } 
  38.  quickSort(arr, l, j) 
  39.  quickSort(arr, j+1, r) 
  40.  
  41. // quickSort 取i 
  42. func quickSortI(arr []int, l int, r int) { 
  43.  if l == r { 
  44.   return 
  45.  } 
  46.  pivot := arr[(l+r+1)>>1] 
  47.  i := l - 1 
  48.  j := r + 1 
  49.  for i < j { 
  50.   for { 
  51.    i++ 
  52.    if arr[i] >= pivot { 
  53.     break 
  54.    } 
  55.   } 
  56.   for { 
  57.    j-- 
  58.    if arr[j] <= pivot { 
  59.     break 
  60.    } 
  61.   } 
  62.   if i < j { 
  63.    arr[i], arr[j] = arr[j], arr[i] 
  64.   } 
  65.  } 
  66.  quickSortI(arr, l, i-1) 
  67.  quickSortI(arr, i, r) 
  68. func main() { 
  69.  var n int 
  70.  fmt.Scan(&n) 
  71.  arr := DoBlackInput(n) 
  72.  quickSort(arr, 0, n-1) 
  73.  for _, v := range arr { 
  74.   fmt.Printf("%d ", v) 
  75.  } 

 

責任編輯:武曉燕 來源: 光城
相關推薦

2023-03-07 08:02:07

數據結構算法數列

2023-03-10 08:07:39

數據結構算法計數排序

2023-03-02 08:15:13

2023-04-27 09:13:20

排序算法數據結構

2023-03-13 10:08:31

數據結構算法

2021-10-18 11:29:48

奇偶排序數組數據結構算法

2023-10-30 08:31:42

數據結構算法

2021-06-09 09:06:52

Go語言算法

2019-03-29 09:40:38

數據結構算法前端

2023-03-06 08:10:52

數據結構算法數據

2021-03-23 08:33:22

Java數據結構算法

2021-04-15 09:36:44

Java數據結構算法

2020-08-12 08:30:20

數據結構算法

2020-12-31 05:31:01

數據結構算法

2020-10-30 09:56:59

Trie樹之美

2022-09-21 07:57:33

二叉搜索樹排序二叉樹

2022-09-26 07:56:53

AVL算法二叉樹

2020-10-21 14:57:04

數據結構算法圖形

2022-03-07 09:42:21

Go快速排序

2017-06-16 09:22:22

數據結構算法鏈表
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲免费观看视频网站 | 久久精品亚洲 | 蜜臀网站| 日本免费一区二区三区四区 | 日本三级网| 亚洲精品久 | 美国一级毛片a | 国产一区二 | 韩国av一区二区 | 久在线| 看片wwwwwwwwwww | 91视频国产一区 | 久久国产精品免费 | 久久亚洲一区二区 | 黄免费看| 久久久天堂 | 亚洲夜夜爽| 黄篇网址 | 亚洲乱码一区二区三区在线观看 | 欧美日韩一二三区 | 色视频在线播放 | 亚洲性爰 | 国产精品视屏 | 中文字幕在线电影观看 | 国产不卡在线观看 | 日本天堂一区二区 | 成人做爰9片免费看网站 | 日本精品免费 | 久久久久久久久国产成人免费 | 亚洲精品白浆高清久久久久久 | 情侣酒店偷拍一区二区在线播放 | 久久另类 | 9久9久 | 99pao成人国产永久免费视频 | 中文字幕一区二区三区乱码在线 | 国产精品1区 | 玖玖免费 | 中文在线播放 | 久久久久久久久久一区 | a级在线免费 | 成人免费视频一区 |