レビュー記事アルゴリズム:実践への理論から挿入ソート


I.はじめに:
第二に、アルゴリズム記述
  • (降順)簡単:1〜Nのいずれかの要素をソートしなければなりません
  • 注:xは後ろ要素または要素と添字Y xまたはyの配列は、要素に対応する前記
  • 図1に示すように、比較される現在の要素としてX(場合X = 1)の要素を取ります。
  • 2、Y = Xのように。
  • 図3に示すように、要素は、要素のy 1 y位置、要素YおよびY-1のスイッチング素子よりも大きい場合、Y 1 Y要素は、要素と比較され、撮影しました。
  • 図4は、0よりも大きいが、実行は、ステップ3を繰り返し続けるとyは、0より大きいか否かが判定されます。
  • 図5に示すように、x + 1が、そうでない場合、配列の長さよりも大きいか否かが判定されるX = X + 1、我々は、ステップ2にソートのそうでなければ終了を続行
  • 上記から分かるように、フラッシュバックのソート機能は要素の配列をソートされたソートを有する前部要素、すなわち、そうXが最後のシーケンスの要素とするとき、xはハーシーをソートに等しい場合、配列はれる時ソート終えました。
第三に、コードの実装
  • 以下のコードは、内部のコードSortUtilsの一部の参照選択ソート:アルゴリズムのレビュー記事を

    class InsertSortDemo {
        fun sort(list: Array<Comparable<Any>>) {
            for (i in 1..(list.size - 1)) {
                var j = i;
                while (j > 0 && SortUtils.less(list[j], list[j - 1])) {
                    SortUtils.exchange(list, j, j - 1);
                    j--;
                }
            }
        }
    }
  • テストコード:

    fun main(args: Array<String>) {
        var list: Array<String> = arrayOf("S", "O", "R","T", "E", "X","A","M","P","L","E");
        var insertSort = InsertSortDemo();
        var startTime = System.currentTimeMillis();
        insertSort.sort(list as Array<Comparable<Any>>)
        var endTime = System.currentTimeMillis();
        var costTime = endTime - startTime;
        println("花费时间: $costTime")
    }
IVの概要:
  • 挿入ソート
  • 特徴:常に左の要素の順序
  • 要素のスイッチング時間:0が最低であるN ^ 2/2回まで(リストには、リスト順にソートされます)、
  • 取引所の平均数:N ^ 2/4回
  • 要素数の比較:N ^ 2/4倍の、好ましくはN-1回(リストは、リスト順にソートされるべきである)、Nの最悪^ 2/2倍の平均
  • いくつかのシナリオを挿入ソートでの使用に適して:
    • 1、配列の各要素彼の最後の位置から短い距離、比較回数と交換の数が比較的小さくなるように
    • 2、順序の配列にわずか数の要素

関連読書

おすすめ

転載: www.cnblogs.com/cnblogzaizai/p/11570488.html