2017-12-10 14 views
-2

私の挿入とクイックソートは、map [uint64] uint64値では機能しません。誰も助けることができますか?前もって感謝します。値によってマップの種類を「aint」にしたいと考えています。map [int] intの値をソートする方法は?

詳細については、お問い合わせください。私はこの質問を改善します。再度、感謝します。

package main 

import (
    "sort" 
    "fmt" 
    "time" 
    "runtime" 
    "math/rand" 
) 
    func main() { 

    runtime.GOMAXPROCS(runtime.NumCPU()) 
    start := time.Now() 

    //the map variable 
    aint := map[uint64]uint64{} 

    start = time.Now() 
    for i := uint64(0); i < 100000000; i++ { 
      aint[i+32132112313] = uint64(rand.Intn(13123123123)+2312423213) //random generation of input data 
//    aint = insertSort(aint,uint64(rand.Intn(13123123123))) 
    } 
    fmt.Printf("%d\n", aint[22]) 

    elapsed := time.Since(start) 
    fmt.Printf("Entry took %s %d\n", elapsed) 

    start = time.Now() 
    quicksort(aint) 

    //  sort.Sort(sort.IntSlice(aint)) 

    elapsed = time.Since(start) 
    fmt.Printf("Sorting took %s %d\n", elapsed) 
} 
func insertionsort(items []int) { 
    var n = len(items) 
    for i := 1; i < n; i++ { 
      j := i 
      for j > 0 { 
        if items[j-1] > items[j] { 
          items[j-1], items[j] = items[j], items[j-1] 
        } 
        j = j - 1 
      } 
    } 
} 


func quicksort(a map[uint64]uint64) map[uint64]uint64 { 
    if len(a) < 2 { 
      return a 
    } 

    left, right := uint64(0), uint64(len(a)-1) 

    pivot := Uint64() % uint64(len(a)) 

    a[pivot], a[right] = a[right], a[pivot] 
    // does not work anymore from here onwards. 
    for uint64(i), _ := range a { 
      if a[i] < a[right] { 
        a[left], a[i] = a[i], a[left] 
        left++ 
      } 
    } 

    a[left], a[right] = a[right], a[left] 

    quicksort(a[:left]) 
    quicksort(a[left+1:]) 

    return a 
} 
+0

これは構築されません。インクルード[完全で検証可能な例を含む]を表示してください(https://stackoverflow.com/help/mcve) – Marc

+0

golangマップは、単なるハッシュテーブルです。実際に保持しているデータをソートする方法はありません。できれば、実際のマップとキーを保持するスライスで構成されたラッパー・タイプを作成し、スライスをソートできます。マップを反復処理すると、実際には順序スライスを繰り返し実行し、設定された順序でマップからデータを取得します。これは実装がかなり簡単ですが、ここでX-Yの問題を解決しようとしているような気がします。あなたは何をしようとしているのですか?多分もっと良い方法があるかもしれない –

答えて

1

ゴーマップは順序付けられていないデータ構造です。あなたが何をしていても、キーまたは値のいずれかによってソートされません。

値を並べ替えるには、スライスを使用してクイックソートを実行する必要があります。

詳細については、Go specまたはEffective Goを参照してください。

関連する問題