選択範囲の並べ替え

選択並べ替え –選択ソートアルゴリズム。何を選ぶの?でも最低数!!!
アルゴリズムの時間計算量 – O(n2)

アルゴリズムは次のように機能します。

<オル>

  • 配列を左から右にループ処理し、現在の開始インデックスとインデックスの番号を覚えておきます。番号 A とします
  • ループ内で、別のループを実行して左から右に移動し、A より小さいものを探します
  • 小さい方を見つけたらインデックスを覚えます。今度は小さい方が数字 A になります
  • 内側のループが終了したら、開始インデックスの数値と数値 A を交換します
  • 上のループを完全に通過すると、ソートされた配列が得られます
  • アルゴリズムの実行例:

    (29, 49, 66, 35, 7, 12, 80)
    29 > 7
    (7, 49, 66, 35, 29, 12, 80)
    Round 1 ENDED
    Round 2
    (7, 49, 66, 35, 29, 12, 80)
    49 > 35
    35 > 29
    29 > 12
    (7, 12, 66, 35, 29, 49, 80)
    Round 2 ENDED
    Round 3
    (7, 12, 66, 35, 29, 49, 80)
    66 > 35
    35 > 29
    (7, 12, 29, 35, 66, 49, 80)
    Round 3 ENDED
    Round 4
    (7, 12, 29, 35, 66, 49, 80)
    (7, 12, 29, 35, 66, 49, 80)
    Round 4 ENDED
    Round 5
    (7, 12, 29, 35, 66, 49, 80)
    66 > 49
    (7, 12, 29, 35, 49, 66, 80)
    Round 5 ENDED
    Round 6
    (7, 12, 29, 35, 49, 66, 80)
    (7, 12, 29, 35, 49, 66, 80)
    Round 6 ENDED
    Sorted: (7, 12, 29, 35, 49, 66, 80)
    

    Rosetta コードで Objective-C 実装が見つかりませんでした。 、私は自分でこう書きました。

    #include <Foundation/Foundation.h>
    
    @implementation SelectionSort
    - (void)performSort:(NSMutableArray *)numbers
    {
       NSLog(@"%@", numbers);   
       for (int startIndex = 0; startIndex < numbers.count-1; startIndex++) {
          int minimalNumberIndex = startIndex;
          for (int i = startIndex + 1; i < numbers.count; i++) {
             id lhs = [numbers objectAtIndex: minimalNumberIndex];
             id rhs = [numbers objectAtIndex: i];
             if ([lhs isGreaterThan: rhs]) {
                minimalNumberIndex = i;
             }
          }
          id temporary = [numbers objectAtIndex: minimalNumberIndex];
          [numbers setObject: [numbers objectAtIndex: startIndex] 
                   atIndexedSubscript: minimalNumberIndex];
          [numbers setObject: temporary
                   atIndexedSubscript: startIndex];
       }
       NSLog(@"%@", numbers);
    }
    
    @end 

    Собрать и запустить можно либо на MacOS/Xcode, либо на любой операционной системе поддерживающей GNUstep, например у меня собирается Clang на Arch Linux.
    Скрипт сборки:

            main.m \
            -lobjc \
            `gnustep-config --objc-flags` \
            `gnustep-config --objc-libs` \
            -I /usr/include/GNUstepBase \
            -I /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include/ \
            -lgnustep-base \
            -o SelectionSort \

    Links

    https://gitlab.com/demensdeum/algorithms/-/tree/master/sortAlgorithms/selectionSort

    Sources

    https://rosettacode.org/wiki/Sorting_algorithms/Selection_sort
    https://ru.wikipedia.org/wiki/Сортировка_выбором
    https://en.wikipedia.org/wiki/Selection_sort
    https://www.youtube.com/watch?v=LJ7GYbX7qpM