AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

聊聊C#歸并排序算法

來源: 責編: 時間:2023-10-10 18:32:19 256觀看
導讀前言歸并排序是一種常見的排序算法,它采用分治法的思想,在排序過程中不斷將待排序序列分割成更小的子序列,直到每個子序列中只剩下一個元素,然后將這些子序列兩兩合并排序,最終得到一個有序的序列。歸并排序實現原理將待排

前言

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

歸并排序實現原理

  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));        }

運行結果

圖片圖片ddD28資訊網——每日最新資訊28at.com

總結

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

本文鏈接:http://www.tebozhan.com/showinfo-26-12750-0.html聊聊C#歸并排序算法

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Go 語言中 panic 和 recover 搭配使用

下一篇: 深入了解歸并排序:原理、性能分析與 Java 實現

標簽:
  • 熱門焦點
Top