成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊C#歸并排序算法

開發 前端
歸并排序是一種高效穩定的排序算法,時間復雜度為O(nlogn)。它的核心思想是將待排序序列分割成更小的子序列,然后逐步合并并排序這些子序列,最終得到一個有序序列。

前言

歸并排序是一種常見的排序算法,它采用分治法的思想,在排序過程中不斷將待排序序列分割成更小的子序列,直到每個子序列中只剩下一個元素,然后將這些子序列兩兩合并排序,最終得到一個有序的序列。

歸并排序實現原理

  1. 將待排序序列分割成兩個子序列,直到每個子序列中只有一個元素。
  2. 將相鄰的兩個子序列合并,并按照大小順序合并為一個新的有序序列。
  3. 不斷重復第2步,直到所有子序列都合并為一個有序序列。

歸并排序代碼實現

public static void MergeSort(int[] arr, int left, int right)
        {
            if (left < right)
            {
                // 計算中間索引
                int mid = (left + right) / 2;

                // 對左半部分數組進行歸并排序
                MergeSort(arr, left, mid);

                // 對右半部分數組進行歸并排序
                MergeSort(arr, mid + 1, right);

                // 合并兩個有序數組
                Merge(arr, left, mid, right);
            }
        }

        public static void Merge(int[] arr, int left, int mid, int right)
        {
            int n1 = mid - left + 1; // 左半部分數組的長度
            int n2 = right - mid;    // 右半部分數組的長度

            // 創建臨時數組
            int[] leftArr = new int[n1];
            int[] rightArr = new int[n2];

            // 將數據拷貝到臨時數組
            for (int i = 0; i < n1; ++i)
            {
                leftArr[i] = arr[left + i];
            }

            for (int j = 0; j < n2; ++j)
            {
                rightArr[j] = arr[mid + 1 + j];
            }

            // 合并兩個有序數組
            int k = left;   // 初始化合并后的數組索引
            int p = 0;      // 初始化左半部分數組的索引
            int q = 0;      // 初始化右半部分數組的索引

            while (p < n1 && q < n2)
            {
                if (leftArr[p] <= rightArr[q])
                {
                    arr[k] = leftArr[p];
                    p++;
                }
                else
                {
                    arr[k] = rightArr[q];
                    q++;
                }
                k++;
            }

            // 復制左半部分數組的剩余元素
            while (p < n1)
            {
                arr[k] = leftArr[p];
                p++;
                k++;
            }

            // 復制右半部分數組的剩余元素
            while (q < n2)
            {
                arr[k] = rightArr[q];
                q++;
                k++;
            }
        }

        public static void MergeSortRun()
        {
            int[] array = { 19, 27, 46, 48, 50, 2, 4, 44, 47, 36, 38, 15, 26, 5, 3 };
            Console.WriteLine("排序前數組:" + string.Join(", ", array));

            MergeSort(array, 0, array.Length - 1);

            Console.WriteLine("排序后數組:" + string.Join(", ", array));
        }

運行結果

圖片圖片

總結

歸并排序是一種高效穩定的排序算法,時間復雜度為O(nlogn)。它的核心思想是將待排序序列分割成更小的子序列,然后逐步合并并排序這些子序列,最終得到一個有序序列。歸并排序需要額外的空間來存儲臨時數組,但由于其分治的特性,適用于對鏈表和外部存儲的排序。

責任編輯:武曉燕 來源: 追逐時光者
相關推薦

2021-03-01 08:02:55

算法排序操作

2011-04-20 14:29:07

歸并排序

2022-04-06 08:58:39

歸并排序Go算法

2023-10-10 08:00:07

2021-04-16 09:40:52

Java數據結構算法

2021-01-26 05:33:07

排序算法快速

2022-09-21 08:38:40

歸并排序C++Python

2009-08-25 17:41:51

C#開發排序算法

2009-08-11 09:19:52

C#選擇排序C#算法

2009-08-26 18:14:11

C#排序算法

2023-10-09 00:12:55

歸并排序數據

2009-08-03 17:38:12

排序算法C#數據結構

2013-02-21 17:02:00

C語言

2021-02-04 13:10:32

歸并排序算法

2009-09-08 17:20:01

C#排序算法

2021-10-12 07:15:02

歸并排序場景

2021-01-30 11:12:21

C#List數據

2023-03-08 08:03:09

數據結構算法歸并排序

2020-08-18 08:22:46

歸并排序

2021-08-04 08:56:34

語言Go排序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久亚洲国产精品 | 欧美国产视频 | 日韩欧美一区二区在线播放 | 亚洲高清在线观看 | 仙人掌旅馆在线观看 | 国产精品污www一区二区三区 | 一区二区三区国产好 | 亚洲网站在线播放 | 天天色天天 | 日本特黄a级高清免费大片 特黄色一级毛片 | 欧美日韩国产一区二区三区 | 粉嫩av久久一区二区三区 | 2018国产精品 | 国产福利91精品一区二区三区 | 国产精品美女久久久久久久网站 | 一区二区在线免费观看视频 | 亚洲午夜电影 | 国产一区二区三区久久久久久久久 | 久久久999免费视频 999久久久久久久久6666 | 亚洲色欧美另类 | 激情在线视频网站 | 成人在线视频观看 | 国产福利在线小视频 | 视频精品一区二区三区 | 国产欧美在线观看 | 天堂亚洲网 | 黄色三级在线播放 | 亚洲自拍偷拍欧美 | 日日干综合| 99成人精品 | 久久亚洲国产 | a级黄色片视频 | 精品国产精品国产偷麻豆 | 国产黑丝av | 欧美激情精品久久久久久变态 | 日韩精品网站 | 亚洲 中文 欧美 日韩 在线观看 | 日韩一区二区三区在线观看 | 亚洲精品成人网 | 999视频在线播放 | av在线免费观看网址 |