chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++中十大排序算法前五個詳解

C語言編程學(xué)習(xí)基地 ? 來源:C語言編程學(xué)習(xí)基地 ? 作者:C語言編程學(xué)習(xí)基地 ? 2021-09-29 17:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本期是C++基礎(chǔ)語法分享的第十五節(jié),今天給大家來梳理一下十大排序算法前五個!

冒泡排序

冒泡排序思路:

1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

2. 對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對。這步做完后,最后的元素會是最大的數(shù)。

3. 針對所有的元素重復(fù)以上的步驟,除了最后一個。

4. 持續(xù)每次對越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。

示例:

void BubbleSort(vector《int》& v) { int len = v.size(); for (int i = 0; i 《 len - 1; ++i) for (int j = 0; j 《 len - 1 - i; ++j) if (v[j] 》 v[j + 1]) swap(v[j], v[j + 1]);}

// 模板實現(xiàn)冒泡排序template《typename T》 //整數(shù)或浮點數(shù)皆可使用,若要使用物件(class)時必須設(shè)定大於(》)的運算子功能void bubble_sort(T arr[], int len) { for (int i = 0; i 《 len - 1; i++) for (int j = 0; j 《 len - 1 - i; j++) if (arr[j] 》 arr[j + 1]) swap(arr[j], arr[j + 1]);}

// 冒泡排序(改進版)void BubbleSort_orderly(vector《int》& v) { int len = v.size(); bool orderly = false; for (int i = 0; i 《 len - 1 && !orderly; ++i) { orderly = true; for (int j = 0; j 《 len - 1 - i; ++j) { if (v[j] 》 v[j + 1]) { // 從小到大 orderly = false; // 發(fā)生交換則仍非有序 swap(v[j], v[j + 1]);

} } }}

選擇排序

選擇排序思路:

1. 在未排序序列中找到最?。ù螅┰兀娣诺脚判蛐蛄械钠鹗嘉恢?/p>

2. 從剩余未排序元素中繼續(xù)尋找最?。ù螅┰?,然后放到已排序序列的末尾

3. 以此類推,直到所有元素均排序完畢

示例:

void SelectionSort(vector《int》& v) { int min, len = v.size(); for (int i = 0; i 《 len - 1; ++i) { min = i; for (int j = i + 1; j 《 len; ++j) { if (v[j] 《 v[min]) { // 標(biāo)記最小的 min = j; } } if (i != min) // 交換到前面 swap(v[i], v[min]); }}

// 模板實現(xiàn)template《typename T》 void Selection_Sort(std::vector《T》& arr) { int len = arr.size();

for (int i = 0; i 《 len - 1; i++) { int min = i; for (int j = i + 1; j 《 len; j++) if (arr[j] 《 arr[min]) min = j; if(i != min) std::swap(arr[i], arr[min]); }}

插入排序

插入排序思路:

1. 從第一個元素開始,該元素可以認為已經(jīng)被排序

2. 取出下一個元素,在已經(jīng)排序的元素序列中從后向前掃描

3. 如果該元素(已排序)大于新元素,將該元素移到下一位置

4. 重復(fù)步驟3,直到找到已排序的元素小于或者等于新元素的位置

5. 將新元素插入到該位置后

6. 重復(fù)步驟2~5

示例:

void InsertSort(vector《int》& v){ int len = v.size(); for (int i = 1; i 《 len; ++i) { int temp = v[i]; for(int j = i - 1;

j 》= 0; --j) { if(v[j] 》 temp) { v[j + 1] = v[j]; v[j] = temp; } else break; } }}

快速排序

快速排序思路:

1. 選取第一個數(shù)為基準(zhǔn)

2. 將比基準(zhǔn)小的數(shù)交換到前面,比基準(zhǔn)大的數(shù)交換到后面

3. 對左右區(qū)間重復(fù)第二步,直到各區(qū)間只有一個數(shù)

void QuickSort(vector《int》& v, int low, int high) { if (low 》= high) // 結(jié)束標(biāo)志 return; int first = low; // 低位下標(biāo) int last = high; // 高位下標(biāo) int key = v[first]; // 設(shè)第一個為基準(zhǔn)

while (first 《 last) { // 將比第一個小的移到前面 while (first 《 last && v[last] 》= key) last--; if (first 《 last) v[first++] = v[last];

// 將比第一個大的移到后面 while (first 《 last && v[first] 《= key) first++; if (first 《 last) v[last--] = v[first]; } // 基準(zhǔn)置位 v[first] = key; // 前半遞歸 QuickSort(v, low, first - 1); // 后半遞歸 QuickSort(v, first + 1, high);

}

// ----------------------------------------------------

// 模板實現(xiàn)快速排序(遞歸)template 《typename T》void quick_sort_recursive(T arr[], int start, int end) { if (start 》= end) return; T mid = arr[end];

int left = start, right = end - 1; while (left 《 right) { while (arr[left] 《 mid && left 《 right) left++; while (arr[right] 》= mid && left 《 right) right--; std::swap(arr[left], arr[right]); } if (arr[left] 》= arr[end]) std::swap(arr[left], arr[end]); else left++; quick_sort_recursive(arr, start, left - 1);

quick_sort_recursive(arr, left + 1, end);}template 《typename T》 //整數(shù)或浮點數(shù)皆可使用,若要使用物件(class)時必須設(shè)定“小於”(《)、“大於”(》)、“不小於”(》=)的運算子功能void quick_sort(T arr[], int len) { quick_sort_recursive(arr, 0, len - 1);}

// ----------------------------------------------------

// 模板實現(xiàn)快速排序(迭代)struct Range { int start, end; Range(int s = 0, int e = 0) { start = s, end = e;

}};template 《typename T》 // 整數(shù)或浮點數(shù)皆可使用,若要使用物件(class)時必須設(shè)定“小於”(《)、“大於”(》)、“不小於”(》=)的運算子功能void quick_sort(T arr[], const int len) { if (len 《= 0) return; // 避免len等於負值時宣告堆疊陣列當(dāng)機 // r[]模擬堆疊,p為數(shù)量,r[p++]為push,r[--p]為pop且取得元素 Range r[len];

int p = 0; r[p++] = Range(0, len - 1); while (p) { Range range = r[--p]; if (range.start 》= range.end) continue; T mid = arr[range.end]; int left = range.start, right = range.end - 1;

while (left 《 right) { while (arr[left] 《 mid && left 《 right) left++; while (arr[right] 》= mid && left 《 right) right--; std::swap(arr[left], arr[right]);

} if (arr[left] 》= arr[range.end]) std::swap(arr[left], arr[range.end]); else left++; r[p++] = Range(range.start, left - 1); r[p++] = Range(left + 1, range.end); }}

堆排序

堆排序:(最大堆,有序區(qū))。從堆頂把根卸出來放在有序區(qū)之前,再恢復(fù)堆。

#include 《iostream》#include 《algorithm》using namespace std;

// 堆排序:(最大堆,有序區(qū))。從堆頂把根卸出來放在有序區(qū)之前,再恢復(fù)堆。

void max_heapify(int arr[], int start, int end) { //建立父節(jié)點指標(biāo)和子節(jié)點指標(biāo) int dad = start; int son = dad * 2 + 1; while (son 《= end) {

//若子節(jié)點指標(biāo)在範(fàn)圍內(nèi)才做比較 if (son + 1 《= end && arr[son] 《 arr[son + 1])

//先比較兩個子節(jié)點大小,選擇最大的 son++; if (arr[dad] 》 arr[son]) //如果父節(jié)點大於子節(jié)點代表調(diào)整完畢,直接跳出函數(shù) return; else { //否則交換父子內(nèi)容再繼續(xù)子節(jié)點和孫節(jié)點比較 swap(arr[dad], arr[son]); dad = son; son = dad * 2 + 1; } }}

void heap_sort(int arr[], int len) { //初始化,i從最後一個父節(jié)點開始調(diào)整 for (int i = len / 2 - 1; i 》= 0; i--) max_heapify(arr, i, len - 1);

//先將第一個元素和已經(jīng)排好的元素前一位做交換,再從新調(diào)整(剛調(diào)整的元素之前的元素),直到排序完畢 for (int i = len - 1; i 》 0; i--) { swap(arr[0], arr[i]); max_heapify(arr, 0, i - 1); }}

int main() { int arr[] = { 3, 5, 3, 0, 8, 6, 1, 5, 8, 6, 2, 4, 9, 4, 7, 0, 1, 8, 9, 7, 3, 1, 2, 5, 9, 7, 4, 0, 2, 6 };

int len = (int) sizeof(arr) / sizeof(*arr); heap_sort(arr, len); for (int i = 0; i 《 len; i++) cout 《《 arr[i] 《《 ‘ ’; cout 《《 endl; return 0;}

今天的分享就到這里了,大家要好好學(xué)C++喲~

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2124

    瀏覽量

    77124
  • 排序算法
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    10427

原文標(biāo)題:C++基礎(chǔ)語法梳理:算法丨十大排序算法(一)

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    單片機ADC采樣算法-中位值平均濾波法

    中位值平均濾波法濾波法就是通過連續(xù)采樣N個數(shù)據(jù),然后對數(shù)據(jù)從小到大排序,然后去掉最大值和最小值,對剩余的N-2值計算算數(shù)平均值。也就是中位值濾波和算數(shù)平均濾波的結(jié)合。 下面看C代碼的實現(xiàn)
    發(fā)表于 01-22 06:17

    廣電計量獲評2025年度十大信創(chuàng)測評機構(gòu)

    近日,第屆信創(chuàng)系列評選結(jié)果正式揭曉。廣電計量(股票代碼:002967)憑借信創(chuàng)測評領(lǐng)域的全鏈條資質(zhì)優(yōu)勢、深厚技術(shù)沉淀與卓越行業(yè)口碑,從全國27省市的126家申報機構(gòu)脫穎而出,成功摘得“2025年度
    的頭像 發(fā)表于 01-15 16:38 ?276次閱讀

    C語言插入排序算法和代碼

    插入排序排序算法的一種,它不改變原有的序列(數(shù)組),而是創(chuàng)建一新的序列,在新序列上進行操作。   這里以從小到大排序為例進行講解。
    發(fā)表于 01-15 06:44

    FPGA DSP模塊使用十大關(guān)鍵陷阱

    FPGA 芯片中DSP(數(shù)字信號處理)硬核是高性能計算的核心資源,但使用不當(dāng)會引入隱蔽性極強的“坑”。這些坑不僅影響性能和精度,甚至?xí)?dǎo)致功能錯誤。以下是總結(jié)了十大關(guān)鍵陷阱及其解決方案,分為 功能正確性、性能優(yōu)化、系統(tǒng)集成 三層面。
    的頭像 發(fā)表于 01-13 15:18 ?369次閱讀

    C語言與C++的區(qū)別及聯(lián)系

    缺點:性能比面向過程低。 二、具體語言上的區(qū)別 1、關(guān)鍵字的不同 C語言有32關(guān)鍵字;C++有63關(guān)鍵字。 2、后綴名不同 C
    發(fā)表于 12-24 07:23

    C語言和C++之間的區(qū)別是什么

    區(qū)別 1、面向?qū)ο缶幊?(OOP): C語言是一種面向過程的語言,它強調(diào)的是通過函數(shù)將任務(wù)分解為一系列步驟進行執(zhí)行。 C++C語言的基礎(chǔ)上擴展了面向?qū)ο蟮奶匦裕С诸?class)、封裝、繼承
    發(fā)表于 12-11 06:23

    C++程序異常的處理機制

    1、什么是異常處理? 有經(jīng)驗的朋友應(yīng)該知道,在正常的CC++編程過程難免會碰到程序不按照原本設(shè)計運行的情況。 最常見的有除法分母為零,數(shù)組越界,內(nèi)存分配失效、打開相應(yīng)文件失敗等等。 一
    發(fā)表于 12-02 07:12

    C語言的常見算法

    # C語言常見算法 C語言中常用的算法可以分為以下幾大類: ## 1. 排序算法 ###
    發(fā)表于 11-24 08:29

    國產(chǎn)海光 OPS 電腦十大排

    國產(chǎn)海光OPS電腦的市場競爭已從單一參數(shù)比拼,轉(zhuǎn)向“性能+適配+服務(wù)+口碑”的綜合實力競爭。本次十大排名基于產(chǎn)品性能、適配兼容性、品牌實力、行業(yè)案例、客戶口碑大核心維度,通過第三方數(shù)據(jù)調(diào)研、客戶
    的頭像 發(fā)表于 11-21 09:25 ?948次閱讀
    國產(chǎn)海光 OPS 電腦<b class='flag-5'>十大排</b>名

    OPS 電腦廠家十大排名榜:2025年最新榜單

    在OPS電腦采購,“選對廠家”直接決定設(shè)備穩(wěn)定性、適配效率與長期運維成本。本次OPS電腦廠家十大排名榜,基于研發(fā)實力、生產(chǎn)規(guī)模、品牌合作背書、售后保障、場景落地能力大核心維度綜合評測,所有數(shù)據(jù)均
    的頭像 發(fā)表于 10-16 16:24 ?1696次閱讀
    OPS 電腦廠家<b class='flag-5'>十大排</b>名榜:2025年最新榜單

    易云物聯(lián)網(wǎng)平臺的十大功能

    在數(shù)字經(jīng)濟與產(chǎn)業(yè)智能化深度融合的浪潮下,易云物聯(lián)網(wǎng)平臺以構(gòu)建了一站式智能化管理生態(tài)。平臺通過整合物聯(lián)網(wǎng)、云計算與大數(shù)據(jù)技術(shù),打破傳統(tǒng)產(chǎn)業(yè)數(shù)據(jù)孤島,為企業(yè)提供從底層設(shè)備連接到頂層決策分析的全鏈路賦能。接下來讓我們走進易云平臺十大
    的頭像 發(fā)表于 07-25 16:33 ?980次閱讀

    永貴科技榮獲2025國充換電行業(yè)十大充電槍品牌

    在5月13號剛剛落幕的2025國充換電行業(yè)十大品牌評選頒獎典禮上。永貴科技憑借卓越的技術(shù)實力與市場口碑,榮獲“2025國充換電行業(yè)十大充電槍品牌”稱號。
    的頭像 發(fā)表于 05-22 14:11 ?1067次閱讀

    乘光而上,載譽前行|度亙核芯斬獲“2024十大光學(xué)產(chǎn)業(yè)技術(shù)獎”!

    5月15日,“2025十大光學(xué)產(chǎn)業(yè)技術(shù)頒獎典禮暨產(chǎn)業(yè)創(chuàng)新大會”在武漢光谷隆重舉行。度亙核芯自主研發(fā)的“高功率高效率976nmDFB鎖波芯片”經(jīng)行業(yè)權(quán)威評審委員會嚴格評審、網(wǎng)絡(luò)投票等多維度綜合評選
    的頭像 發(fā)表于 05-16 17:45 ?1484次閱讀
    乘光而上,載譽前行|度亙核芯斬獲“2024<b class='flag-5'>中</b>國<b class='flag-5'>十大</b>光學(xué)產(chǎn)業(yè)技術(shù)獎”!

    工業(yè)路由器品牌十大排

    、產(chǎn)品覆蓋廣泛的企業(yè)。本文結(jié)合行業(yè)權(quán)威榜單與市場動態(tài),梳理2024-2025年工業(yè)路由器品牌十大排名(排名不分先后) 一、品牌綜合實力與產(chǎn)品特點 1. 星創(chuàng)易聯(lián) 星創(chuàng)易聯(lián)憑借高性能處理器與多協(xié)議兼容性穩(wěn)居國內(nèi)工業(yè)路由器市場前列。其產(chǎn)
    的頭像 發(fā)表于 03-27 16:21 ?2626次閱讀

    C++學(xué)到什么程度可以找工作?

    C++學(xué)到什么程度可以找工作?要使用C++找到工作,特別是作為軟件開發(fā)人員或相關(guān)職位,通常需要掌握以下幾個方面: 1. **語言基礎(chǔ)**:你需要對C++的核心概念有扎實的理解,包括但不限于指針、內(nèi)存
    發(fā)表于 03-13 10:19