luaにおけるtableのソート


luaにおけるtableのソートは、一般にluaが持参するtableである.sort()関数のソートは、一般的には自分で書いたソート方式ではありません.
table.sort()ソートと作業中に発生する問題1.ソート方法
table.sort(tbl,function(a,b)
        return a > b
end)
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

  • 以上は簡単な例ですが、ソートされるデータの昇順については、aとbが同じように間違っていると思います.
    は、falseを返し、厳密ではない昇順であり、厳密には非降順配列であってもよい.luaのソートについては、luaが持っている関数を使って、自分で車輪を作らないで、自分でソートの関数を書くのが一番です.
    ソートするときは厳格な弱順で、小さい関係を使うべきです.
    結果1)の反自己反転性を得るには,正しいソートが満たすべき条件である.
    cmp(a, a) === false
  • 1
  • 1

  • 書く順序付けの実現において,自己と自己を比較し,常にfalse 2)非対称性である.
     cmp(a, b) == true ==> cmp(b, a) == false
  • 1
  • 1

  • aとbを比較して得られるのがtrueであり,bとaを比較して得られるのがfalseであり,そうでなければ3)伝達性は成り立たない.
    cmp(a, b) == true && cmp(b, c) == true ==> cmp(a, c) == true
  • 1
  • 1

  • 比類のない伝達性とは、aとbの間に成立し、bとcの間に成立すれば、aとcの間にも成立し、伝達性を達成することができる.
    cmp(a,b)a==b+1これが成立しないように,このようなcmp(a,b)==true&&cmp(b,c)==trueが存在する場合,a=2,b=1,c=0であるがcmp(a,c)は成立しないと仮定するので,このソートは成功しない.
    注:table.sort(list,function(a,b)end)はこの中でa,bが存在するかどうかを判断する必要はありません.彼らは必ず存在し、listのデータなので、必ず存在します.
    二:複数の条件の比較いくつかの需要の中で、比較するデータは1つではありませんて、組み合わせの形式で現れたので、先に比較フィールドaで、もし等しいならば更に比較フィールドb、それでは
    このような例を扱うには,以下のような方式がある.
    function(a, b)    
      return a.level > b.level or 
      a.level == b.level and a.exp > b.exp
    end
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

  • 2)
    function(a, b)    
    if a.level == b.level then
        return a.exp > b.exp
    end
        return a.level > b.level
    end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

  • 3)
    function(a, b)
        if a.level ~= b.level then
            return a.level > b.level
        end
        return a.exp > b.exp
    end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

  • この3つの方法のうち、3つ目は最も優れています.それは大きな拡張性を持っているので、後で3つ以上のフィールドを比較すると、
    では、直接後に追加すると、2つ目は、逆の順序で比較し、比較のフィールドを比較する順序は1、2、3、4です.
    2つ目の場合は、まず4が等しいかどうかを判断し、3、2が等しいかどうかを判断します.理解しにくい
    3:ソートと最値は異なるソート方式に対して、アルゴリズムが得た効果は異なり、アルゴリズムの複雑さを考慮しなければならない.任意table線形検索最値O(n)ソートO(nlgn)は、最値のみを必要とし、配列規模が小さくない場合はソートしません.
    四:複数回ソート現実の例では、ソートする条件が1つ以上で、2つ以上の場合、1つの関数で、1つの関数で
    二次的に並ぶ.並べ替えの安定性:速い並べ替えは安定性を備えていないため、条件の順序に従って何度も並べ替えても効率が高くない
    五:ランダムソート(shuffle)ランダムソートはいくつかのデータに対して、彼らの順序を乱して、新しいデータを得て、以下は簡単な例です
    function i3k_shuffle(tbl)
        local n = #tbl
        for i = 1, n do
            local j = math.random(i, n)
            if j > i then
                tbl[i], tbl[j] = tbl[j], tbl[i]
            end
        end
    end