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

我們一起聊聊C#堆排序算法

開發 前端
堆排序是一種高效的排序算法,通過構建最大堆和反復調整堆的操作,實現對數組的排序。其時間復雜度為O(nlogn),并且具有較好的穩定性和空間效率。

前言

堆排序是一種高效的排序算法,基于二叉堆數據結構實現。它具有穩定性、時間復雜度為O(nlogn)和空間復雜度為O(1)的特點。

堆排序實現原理

  1. 構建最大堆:將待排序數組構建成一個最大堆,即滿足父節點大于等于子節點的特性。
  2. 將堆頂元素與最后一個元素交換:將最大堆的堆頂元素與堆中的最后一個元素交換位置,將最大元素放到了數組的末尾。
  3. 重新調整堆:對剩余的n-1個元素進行堆調整,即將堆頂元素下沉,重新形成最大堆。
  4. 重復步驟2和3,直到堆中的所有元素都被排列好。

堆排序代碼實現

public static void HeapSort(int[] array)
        {
            int arrayLength = array.Length;

            //構建最大堆
            for (int i = arrayLength / 2 - 1; i >= 0; i--)
                Heapify(array, arrayLength, i);

            //依次取出堆頂元素,并重新調整堆
            for (int i = arrayLength - 1; i >= 0; i--)
            {
                //將堆頂元素與當前最后一個元素交換
                int temp = array[0];
                array[0] = array[i];
                array[i] = temp;

                //重新調整堆
                Heapify(array, i, 0);
            }
        }

        private static void Heapify(int[] arr, int n, int i)
        {
            int largest = i; //假設父節點最大
            int left = 2 * i + 1; //左子節點
            int right = 2 * i + 2; //右子節點

            //如果左子節點大于父節點,則更新最大值
            if (left < n && arr[left] > arr[largest])
                largest = left;

            //如果右子節點大于父節點和左子節點,則更新最大值
            if (right < n && arr[right] > arr[largest])
                largest = right;

            //如果最大值不是當前父節點,則交換父節點和最大值,并繼續向下調整堆
            if (largest != i)
            {
                int swap = arr[i];
                arr[i] = arr[largest];
                arr[largest] = swap;

                Heapify(arr, n, largest);
            }
        }

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

            HeapSort(array);

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

運行結果

圖片圖片

總結

堆排序是一種高效的排序算法,通過構建最大堆和反復調整堆的操作,實現對數組的排序。其時間復雜度為O(nlogn),并且具有較好的穩定性和空間效率。但是由于其涉及大量的元素交換操作,所以在實際應用中,可能不如快速排序等算法效率高。

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

2024-11-28 09:57:50

C#事件發布器

2025-02-13 09:32:12

C#重寫override

2024-08-26 08:34:47

AES加密算法

2025-01-09 07:54:03

2023-05-08 07:32:03

BFSDFS路徑

2024-12-23 10:20:50

2024-08-30 11:00:22

2021-08-27 07:06:10

IOJava抽象

2024-02-20 21:34:16

循環GolangGo

2023-06-30 08:18:51

敏捷開發模式

2023-09-10 21:42:31

2023-08-10 08:28:46

網絡編程通信

2022-05-24 08:21:16

數據安全API

2023-08-04 08:20:56

DockerfileDocker工具

2022-08-30 13:48:16

LinuxMySQL內存

2024-05-29 13:18:12

線程Thread?方式

2022-11-12 12:33:38

CSS預處理器Sass

2024-02-26 00:00:00

Go性能工具

2023-12-28 09:55:08

隊列數據結構存儲

2022-01-04 12:08:46

設計接口
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品视频免费观看 | 久久久久成人精品免费播放动漫 | 黄色网一级片 | 日韩精品一区二区三区中文在线 | 亚洲成人久久久 | 精品欧美一区二区在线观看 | 久久33| 久久久久久亚洲 | 欧美精品一区二区三区在线 | 久久精品久久精品久久精品 | 精品国产一区二区三区观看不卡 | 日韩成人免费在线视频 | 国产一区中文字幕 | 国产a区| 成人免费视频网 | 亚洲天堂一区二区 | 91精品久久久久久久久中文字幕 | 日韩免费视频一区二区 | 国产成人午夜高潮毛片 | 久久久精品一区二区三区 | 亚洲一区二区电影网 | 日本福利一区 | 亚洲国产成人精品久久久国产成人一区 | 夜夜骑首页 | 亚洲va欧美va人人爽午夜 | 欧美一区二区三区在线播放 | 中文字幕一区二区三区四区五区 | 国产精品久久久久久久久图文区 | 国产日韩一区二区 | 久热m3u8| 涩涩导航| 久久久天堂 | 日日操夜夜摸 | 精品成人69xx.xyz | 草草草网站 | 视频一区二区中文字幕 | 欧美一级小视频 | 99国产在线 | 网站黄色在线免费观看 | 久久99精品国产 | 久久久久国产精品午夜一区 |