Flutter Dart のクイック ソート アルゴリズムの例についての話

 

私たちは日々の研究開発の過程で、開発したプログラムが効率的であるかどうかを常に考えており、プログラムを適切に実行するには、アルゴリズムを深く理解し、習得することが不可欠です。今後数日で、いくつかの一般的なアルゴリズムを皆さんに見てもらう予定です。

クイックソートアルゴリズムについて一緒に学びましょう  !

クイックソートアルゴリズム

Wikipedia の紹介: クイック ソートでは、分割統治戦略を使用してシーケンス (リスト) を 2 つの小さいサブシーケンスと大きいサブシーケンスに分割し、次に 2 つのサブシーケンスを再帰的に並べ替え、最後にマージしてシーケンスの小さいものから大きいものまでのリストを取得します。

賢い友人なら、「分割統治戦略とは何ですか?」と尋ねるでしょう。

分割統治

文字通りの説明は「分割統治」です。これは、複雑な問題を 2 つ以上の同一または類似のサブ問題に分割し、その後、最後のサブ問題ができるまで、サブ問題をより小さなサブ問題に分割することです。単純かつ直接的に解決できる場合、元の問題の解決策は部分問題の解決策を組み合わせたものになります。

ここから、今日説明するクイック ソート アルゴリズムの実装手順に進むことができます。

  • データからランダムに値を取得し、その値の大きさに応じて左側のデータセットの値がこの値より小さく、左側のデータセットの値がこの値より小さい場合は左右の 2 つのデータセットに分割します。
  • 両側でデータを再帰的に呼び出すステップ 1
  • すべてのデータを結合する

クイックソートアルゴリズムの実装

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

void main() {

  List<int> quickSort(List<int> arr) {

    // 处理边界问题

    if (arr.length <= 1) {

      return arr;

    }

    // 取出第一个值作为参考

    int splitData = arr[0];

    // 小于参考值的集合

    List<int> low = [];

    // 大于参考值的集合

    List<int> hight = [];

    // 与参考相等的集合

    List<int> mid = [];

    // 初次把参考值添加到mid中

    mid.add(splitData);

    for (int i = 1; i < arr.length; i++) {

      if (arr[i] < splitData) {

        // 小于

        low.add(arr[i]);

      } else if (arr[i] > splitData) {

        // 大于

        hight.add(arr[i]);

      } else {

        // 等于

        mid.add(arr[i]);

      }

    }

    // 二分数据后,再继续递归整理

    low = quickSort(low);

    hight = quickSort(hight);

    // 最后合并

    return [...low, ...mid, ...hight];

  }

  const List<int> ary = [4, 5, 1, 3, 6, 2, 5, 6, 7, 2, 4];

  print(quickSort(ary));

}

ここまで、 クイックソートアルゴリズムを再検討してきました 。

 

転載元:マイクロリーディング   https://www.weidianyuedu.com

おすすめ

転載: blog.csdn.net/weixin_45707610/article/details/131864566