Go データ構造とアルゴリズムの基本クイックソート

Go データ構造とアルゴリズムの基本クイックソート

[[411577]]

この記事はWeChatの公開アカウント「Light City」から転載したもので、著者はlightcityです。この記事を転載する場合は、Guangcheng公式アカウントまでご連絡ください。

最近、アルゴリズムを再検討し、acwing を最初からフォローして、Go で実装する予定です。

今日の目標は、Go で書かれたクイックソートを学ぶことです。

acwingから学びました。

入力:

  1. 3
  2. 1 3 2

出力:

  1. 1 2 3

ちょっとした考察:

1. ピボットを定義する

2. ピボットに従って間隔を分割する

3. 再帰的な部分問題

ピボットはランダムに選択できます。例: arr[l]、arr[r]など。

再帰時には 2 つのオプションがあります。1 つは j を取ることですが、無限ループを防ぐために pivot が arr[r] を取らないようにする必要があります。

この記事ではこれを実装します:

  1. ピボット := arr[(l+r)>>1]
  2. クイックソート(arr, l, j)
  3. クイックソート(arr, j+1, r)

もう 1 つの方法は、i を取ることです。無限ループを防ぐために、pivot が arr[l] を取らないようにする必要があります。同時に、arr[(l+r)>>1] を使用することはできず、切り上げる必要があります。たとえば、arr[(l+r+1)>>1] です。

この記事ではこれを実装します:

  1. ピボット := arr[(l+r+1)>>1]
  2. クイックソートI(arr, l, i-1)
  3. クイックソートI(arr, i, r)

最後に、囲碁の知識を追加します。

1. 入力

go で入力を処理するには、fmt.Scan を使用してアドレスを渡します。ここでは、後で直接再利用できる関数を実装しました。

  1. // DoBlackInputはスペース入力を配列として処理します
  2. DoBlackInput関数(n int ) [] int {
  3. arr := make([] int , n)
  4. i := 0; i < n; i++ {
  5. fmt.Scan(&arr[i])
  6. }
  7. リターン
  8. }

2. 交換

2 つの要素をすばやく交換する方法。

  1. a, b = b, a

これにより、素早い交換が可能になります。

3.do...while{}

以下を使用できます:

  1. のために{
  2. // 何かをする
  3. 真の場合{
  4. 壊す
  5. }
  6. }

4.i++ と ++i

++i と --i はサポートされていません。

最終的に、完全なコードは次のようになります。

  1. パッケージメイン
  2.  
  3. 「fmt」をインポートする 
  4.  
  5. // DoBlackInputはスペース入力を配列として処理します
  6. DoBlackInput関数(n int ) [] int {
  7. arr := make([] int , n)
  8. i := 0; i < n; i++ {
  9. fmt.Scan(&arr[i])
  10. }
  11. リターン
  12. }
  13.  
  14. // クイックソートフェッチ j
  15. func quickSort(arr [] int , l int , r int ) {
  16. l >= r の場合 {
  17. 戻る 
  18. }
  19. ピボット := arr[(l+r)>>1]
  20. 私 := l - 1
  21. j := r + 1
  22. i < j {に対して
  23. のために{
  24. 私は++
  25. arr[i] >= pivot の場合 {
  26. 壊す
  27. }
  28. }
  29. のために{
  30. j --  
  31. arr[j] <= pivot の場合 {
  32. 壊す
  33. }
  34. }
  35. i < j {の場合
  36. arr[i]、arr[j] = arr[j]、arr[i]
  37. }
  38. }
  39. クイックソート(arr, l, j)
  40. クイックソート(arr, j+1, r)
  41. }
  42.  
  43. // クイックソートフェッチ i
  44. func quickSortI(arr [] int , l int , r int ) {
  45. l == r の場合
  46. 戻る 
  47. }
  48. ピボット := arr[(l+r+1)>>1]
  49. 私 := l - 1
  50. j := r + 1
  51. i < j {に対して
  52. のために{
  53. 私は++
  54. arr[i] >= pivot の場合 {
  55. 壊す
  56. }
  57. }
  58. のために{
  59. じ --  
  60. arr[j] <= pivot の場合 {
  61. 壊す
  62. }
  63. }
  64. i < j {の場合
  65. arr[i]、arr[j] = arr[j]、arr[i]
  66. }
  67. }
  68. クイックソートI(arr, l, i-1)
  69. クイックソートI(arr, i, r)
  70. }
  71. 関数main() {
  72. var n int  
  73. fmt.Scan(&n)
  74. arr := DoBlackInput(n)
  75. クイックソート(arr, 0, n-1)
  76. _の場合、v := 範囲 arr {
  77. fmt.Printf( "%d" , v)
  78. }
  79. }

<<:  データセットと DataLoader を使用して PyTorch でデータをカスタマイズする

>>:  AIを活用した自動化はエンタープライズレベルの自動化2.0です

ブログ    
ブログ    

推薦する

2024 年の人工知能に関するトップ 10 の予測

2023年の人工知能分野でキーワードを1つだけ選ぶとしたら、それはおそらく「ビッグモデル」でしょう。...

人工知能技術が教育業界に与える主な影響は何ですか?

今日、人工知能技術は社会のあらゆる分野にますます大きな影響を及ぼしており、教育も例外ではありません。...

アンドリュー・ン:ディープラーニングの知識を完全に説明する 22 枚の写真

Andrew Ng 氏は、Tess Ferrandez 氏が修了したディープラーニング特別コースのイ...

AIと機械学習がIoTデータから重要な洞察を引き出す方法

過去数年間、モノのインターネットに関する議論の多くは、接続されたデバイス自体、つまりそれが何であるか...

AIと機械学習がデータセンターにどのように役立つか

人工知能 (AI) には、問題を理解し解決する神秘的な力があると考える人もいます。人工知能は人々の日...

AI軍拡競争により、将来のAIハードウェアアーキテクチャの開発に3つの主要な方向性が生まれました。

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

ロボットが医療に力を与える!しかし、医療ロボットがブレイクするまでには、まだ4歩の道のりがある。

今回の流行期間中、病院や最前線の防疫現場では、体温測定ロボット、消毒ロボット、検査ロボット、咽頭ぬぐ...

ブロックチェーンとAI: 完璧な組み合わせ

ブロックチェーンと人工知能は、現在最もホットなテクノロジートレンドの 2 つです。これら 2 つの技...

スマートメーター: スマートなエネルギー管理への道

新型コロナウイルス感染症のパンデミックにより、配電事業者はメーターの読み取りとその後の請求という基本...

トレンドマイクロ:2030年までにサイバーセキュリティ分野で人工知能が人間に取って代わる

テキサス州ダラスに本拠を置くクラウドセキュリティ企業トレンドマイクロの新しい調査によると、IT業界の...

AIと機械学習の品質保証

[51CTO.com クイック翻訳]人工知能はここ数年間、人々の注目を集めてきました。 「あなたのた...

LinkedIn が Dagli をオープンソース化し、Java 機械学習ライブラリをリリース

近年では、大規模データ向けのTensorFlow、PyTorch、Caffee、CNTK、Spark...

新時代の人工知能の優位性を獲得し、時代に淘汰されないためにはどうすればよいか

企業で人工知能が応用され、開発されるにつれて、ビジネスリーダーは市場競争力を向上させるためにクラウド...

RPAと医療におけるインテリジェントオートメーションの台頭

デジタル変革はヘルスケアにおける大きなトレンドと考えられており、インテリジェントな自動化もその一部と...

クロス検証は非常に重要です!

まず、クロス検証がなぜ必要なのかを理解する必要があります。クロス検証は、予測モデルのパフォーマンスと...