選擇排序和堆排序

目錄

前言??????

一.選擇排序

1.思想

2.實現

3.特點

二.堆排序

1.思想

2.實現

3.特點



前言??????

?????????排序算法是計算機科學中的基礎工具之一,對于數據處理和算法設計有著深遠的影響。了解不同排序算法的特性和適用場景,能夠幫助程序員在特定情況下選擇最合適的算法,從而提高程序的效率和性能。本節我們講述選擇排序和堆排序。

一.選擇排序

1.思想

基本思想是在未排序的部分中選擇最小和最大的元素,然后將其與未排序部分的第一個元素和最后一個交換位置。重復這個過程,直到整個序列有序。

選擇排序的步驟如下:

  1. 初始狀態: 將整個序列分為已排序部分和未排序部分,初始時已排序部分為空,未排序部分包含所有元素。

  2. 選擇最小元素: 在未排序部分中找到最小和最大的元素,并記錄其位置。

  3. 交換位置: 將找到的最小元素與未排序部分的第一個元素交換位置。最大元素與最后一個元素交換。

  4. 更新已排序部分和未排序部分: 將交換后的元素視為已排序,將原未排序部分減少二個元素,繼續從未排序部分重復步驟2和步驟3。

  5. 重復直至完成: 重復上述過程,直到整個序列有序。

2.實現

void SelectSort(int* a, int n)
{int gap = 0;int end = n - 1;while (gap < end){int maxi = gap, mini = gap;for (int i = gap+1; i <= end; i++){if (a[mini] > a[i]){mini = i;}if (a[maxi] < a[i]){maxi = i;}}Swap(&a[gap], &a[mini]);if (gap == maxi){maxi = mini;}Swap(&a[end], &a[maxi]);gap++;end--;}
}

????????注意:為了避免最大值為第一個時,被最小值交換時換走,我們修正一下,如果第一個值就是最大值,那么當第一個值與最小值交換后,修正最大值的位置

時間復雜度:O(n^2)

空間復雜度O(1)

穩定性:不穩定

3.特點

1.優勢:

  1. 交換操作相對較少: 選擇排序的交換操作次數相對較少,每次只進行一次交換。這使得它在某些場景下可能比冒泡排序更有效。

  2. 適用于小規模數據集: 在數據規模較小的情況下,選擇排序的性能可能相對較好,因為其簡單性和交換操作的相對少。

2.缺點

  1. 時間復雜度高: 選擇排序的時間復雜度為O(n^2),其中n是待排序序列的長度。這意味著對于大規模數據集,選擇排序的性能可能相對較差,尤其是與一些O(nlog n)時間復雜度的算法相比。

  2. 不穩定: 選擇排序是一種不穩定的排序算法。當存在相等元素時,它可能會改變它們的相對順序,使得選擇排序在某些應用場景中不適用。

  3. 對逆序數據的不足: 在對逆序數據(完全逆序排列的情況)進行排序時,選擇排序的性能較差。每次選擇最小元素時,都需要在未排序的部分中進行線性搜索,導致交換操作次數較多。

二.堆排序

1.思想

堆排序是一種基于二叉堆(Binary Heap)數據結構的排序算法。堆是一個特殊的樹狀數據結構,其中每個節點的值都不大于或不小于其子節點的值。堆可以分為最大堆和最小堆。(可以看這個堆的實現與操作-CSDN博客)

堆排序的基本思想如下:

  1. 建堆: 將待排序序列構建成一個二叉堆。對于最大堆,父節點的值大于或等于其子節點的值;對于最小堆,父節點的值小于或等于其子節點的值。

  2. 排序: 不斷將堆頂元素與堆的最后一個元素交換,然后對除最后一個元素外的部分重新調整成堆。這樣,每次交換后,最大或最小元素就被放置在了正確的位置。重復這個過程,直到整個序列有序。

2.實現

void AdjustDown(int* a,int parent,int size)//向下調整建堆
{int child = parent *2 + 1;while (child < size){if (child+1<size&&a[child] < a[child + 1])child++;if (a[parent] < a[child]){Swap(&a[parent], &a[child]);parent = child;child = parent*2 + 1;}else{break;}}
}
void HeapSort(int* a, int n)//堆排序
{for (int i = (n - 1) / 2; i >= 0; i--){AdjustDown(a, i, n);}int end = n-1 ;while (end){Swap(&a[0], &a[end]);AdjustDown(a, 0, end );end--;}
}

????????這里我們采用向下調整建堆,從第一個非葉子節點開始,建大堆后,每次將堆頂元素調整到數組后面,再調整堆

時間復雜度:O(nlogn)

空間復雜度O(1)

穩定性:不穩定

3.特點

1.優勢:

  1. 時間復雜度穩定: 堆排序的時間復雜度為O(n log n),其中n是待排序序列的長度。這使得堆排序在大規模數據集上具有相對較好的性能。

  2. 適用于大規模數據: 由于其O(n log n)的時間復雜度,堆排序對于大規模數據集的排序任務是一個較好的選擇,特別是相對于一些O(n^2)復雜度的排序算法。

2.缺點:

  1. 不穩定性: 堆排序是一種不穩定的排序算法。在交換的過程中,可能會改變相同元素的相對順序。對于需要保持相等元素相對位置關系的應用場景,不穩定性可能是一個不可接受的缺點。

  2. 對于小規模數據: 盡管堆排序在大規模數據集上表現良好,但在小規模數據集上,它的性能可能不如一些簡單且更容易實現的排序算法,如快速排序或插入排序。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215481.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215481.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215481.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Go】基于GoFiber從零開始搭建一個GoWeb后臺管理系統(一)搭建項目

前言 最近兩個月一直在忙公司的項目&#xff0c;上班時間經常高強度寫代碼&#xff0c;下班了只想躺著&#xff0c;沒心思再學習、做自己的項目了。最近這幾天輕松一點了&#xff0c;終于有時間 摸魚了 做自己的事了&#xff0c;所以到現在我總算是搭起來一個比較完整的后臺管…

nrfutil工具安裝

準備工作&#xff0c;下載相關安裝包 鏈接&#xff1a;https://pan.baidu.com/s/1LWxhibf8LiP_Cq3sw0kALQ 提取碼&#xff1a;2dlc 解壓后&#xff0c;分別安裝以下安裝包 在C盤下創建目錄nordic_tools&#xff0c;并將nrfutil復制到剛創建的目錄下 環境變量path下添加C:\nor…

圖像采集卡 Xtium?2-XGV PX8支持高速 GigE Vision 工業相機

圖像采集卡&#xff08;Image Capture Card&#xff09;&#xff0c;又稱圖像捕捉卡&#xff0c;是一種可以獲取數字化視頻圖像信息&#xff0c;并將其存儲和播放出來的硬件設備。很多圖像采集卡能在捕捉視頻信息的同時獲得伴音&#xff0c;使音頻部分和視頻部分在數字化時同步…

python elasticsearch 日期聚合

索引以及數據如下 PUT dateagg {"mappings": {"properties": {"charge":{"type": "double"},"types":{"type": "keyword"},"create_date":{"type": "date",&…

裸機單片機適用的軟件架構

單片機通常分為三種工作模式&#xff0c;分別是 1、前后臺順序執行法 2、操作系統 3、時間片輪詢法 1、前后臺順序執行法 利用單片機的中斷進行前后臺切換&#xff0c;然后進行任務順序執行&#xff0c;但其實在…

Spring Boot Web

目錄 一. 概述 二. Spring Boot Web 1.2.1 創建SpringBoot工程&#xff08;需要聯網&#xff09; 1.2.2 定義請求處理類 1.2.3 運行測試 1.3 Web分析 三. Http協議 3.1 HTTP-概述 剛才提到HTTP協議是規定了請求和響應數據的格式&#xff0c;那具體的格式是什么呢? 3…

spring結合設計模式之策略模式

策略模式基本概念&#xff1a; 一個接口或者抽象類&#xff0c;里面兩個方法&#xff08;一個方法匹配類型&#xff0c;一個可替換的邏輯實現方法&#xff09;不同策略的差異化實現(就是說&#xff0c;不同策略的實現類) 使用策略模式替換判斷&#xff0c;使代碼更加優雅。 …

Swagger快速上手

快速開始&#xff1a; 導入maven包 <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version> </dependency><dependency><groupId>io.springfox<…

MongoDB在Windows系統和Linux系統中實現自動定時備份

本文主要介紹MongoDB在Windows系統和Linux系統中如何實現自動定時備份。 目錄 MongoDB在Windows系統中實現自動定時備份MongoDB在Linux系統中實現自動定時備份備份步驟備份恢復 MongoDB在Windows系統中實現自動定時備份 要在Windows系統中實現自動定時備份MongoDB數據庫&#…

區塊鏈實驗室(32) - 下載arm64的Prysm

Prysm是Ethereum的共識層。 1. 下載prysm.sh curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh && chmod x prysm.sh2. 下載x86版prysm共識客戶端 ./prysm.sh beacon-chain --download-only3.下載arm64版prysm共識客…

刪除當前目錄及其子目錄下的重復文件

言歸正傳&#xff0c;直接看代碼 public class RemoveDuplicateFiles {public static void main(String[] args) throws IOException {String directoryPath "D:\\dir";List<File> allFiles getAllFiles(directoryPath);removeDuplicateFile(allFiles);}pri…

HP108w打印機出現Direct.....無線網,連接不上

本人用手機打印的&#xff0c;安卓 這種情況我也不知道為啥出現&#xff0c;如果出現上面的情況&#xff0c;可以 一直按住&#xff0c;會發藍光的&#xff0c;無線信號樣子的按鈕&#xff0c;持續按20s&#xff0c;松手后觀察自己的wifi列表&#xff0c;本人出現了&#xff…

Linux——web網站服務(一)

一、安裝httpd服務器Apache網站服務 1、準備工作 為了避免發送端口沖突&#xff0c;程序沖突等現象&#xff0c;卸載使用rpm方式安裝的httpd #使用命令檢查是否下載了httpd [rootserver ~]# rpm -qa httpd #如果有則使用 [rootserver ~]# rpm -e httpd --nodeps Apache的配置…

抖音小店經營規則解析:避免被扣分的關鍵因素

抖音小店是一個受歡迎的電商平臺&#xff0c;為創業者提供了良好的銷售和推廣機會。為了確保在抖音小店的運營中不會被扣分或出現其他問題&#xff0c;不若與眾整理了幾個關鍵的規則需要注意和遵守。 1. 產品合規性&#xff1a; 抖音小店要求所有銷售的產品必須合法合規&#x…

欣賞動態之美,不如欣賞C語言實現動態內存管理之美 ! ! !

本篇會加入個人的所謂‘魚式瘋言’ ??????魚式瘋言:??????此瘋言非彼瘋言 而是理解過并總結出來通俗易懂的大白話, 我會盡可能的在每個概念后插入魚式瘋言,幫助大家理解的. 可能說的不是那么嚴謹.但小編初心是能讓更多人能接受我們這個概念 &#xff01;&#xff0…

ubuntu解決問題:E: Unable to locate package manpages-posix-dev

sudo apt-get install manpages-posix-dev 想要在ubuntu里面安裝manpages-posix-dev這個包&#xff0c;發現彈出錯誤 E: Unable to locate package manpages-posix-dev 解決方法如下&#xff1a; 1 查看當前ubuntu的版本 abhishekitsfoss:~$ lsb_release -a No LSB module…

python自動化測試實戰 —— WebDriver API的使用

軟件測試專欄 感興趣可看&#xff1a;軟件測試專欄 自動化測試學習部分源碼 python自動化測試相關知識&#xff1a; 【如何學習Python自動化測試】—— 自動化測試環境搭建 【如何學習python自動化測試】—— 瀏覽器驅動的安裝 以及 如何更…

河南省專業技術人員職稱評審之繼續教育

&#xff08;一&#xff09;職稱評審時會遇到一個關于繼續教育學時是否足夠的問題&#xff0c;作為新人很容易一頭霧水&#xff0c;這里以河南省為例&#xff0c;先在管理系統 http://manage.hnzjgl.gov.cn 注冊&#xff0c;根據自己單位選擇&#xff0c;有些高校雖然在地方而不…

力扣題:數字與字符串間轉換-12.12

力扣題-12.12 [力扣刷題攻略] Re&#xff1a;從零開始的力扣刷題生活 力扣題1&#xff1a;539. 最小時間差 解題思想&#xff1a;將字符串的時間形式換成數字形式的時間&#xff0c;然后計算差值即可&#xff0c;最重要的是最小的值加上一天的時間加入到數組最后&#xff08…

圖文教程:stable-diffusion的基本使用教程 txt2img(多圖)

之前我介紹了SD的安裝過程&#xff0c;那么這篇將介紹怎么使用SD 使用模型 SD安裝好之后&#xff0c;我們只有一個默認的模型。這個模型很難滿足我們的繪圖需求&#xff0c;那么有2種方法。 1是自己訓練一個模型&#xff08;有門檻&#xff09;2是去網站上找一個別人練好的模…