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

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

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

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

揭秘冒泡排序、交換排序和插入排序

Android編程精選 ? 來源:編程學(xué)習(xí)總站 ? 作者:寫代碼的牛頓 ? 2021-06-18 09:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

01

冒泡排序

在實(shí)現(xiàn)冒泡排序代碼之前我們先理解一下什么是冒泡排序,我們舉一個(gè)現(xiàn)實(shí)生活中的例子來幫助我們理解。

操場排隊(duì)我們都知道吧,現(xiàn)在有一支隊(duì)伍,有的人身高一樣有的不一樣,這個(gè)時(shí)候我們需要一個(gè)教官對(duì)這支隊(duì)伍進(jìn)行整理,使得隊(duì)伍里的人從低到高的排下去,教官想到了一種排序算法來對(duì)這支隊(duì)伍進(jìn)行身高排序。

如何理解冒泡排序

教官立馬想到了一個(gè)排序算法,從第1個(gè)人開始往隊(duì)伍后面的方向相鄰的兩個(gè)人進(jìn)行身高對(duì)比,如果前面的人比后一個(gè)人高則兩人交換位置。

最后最高的人排在了隊(duì)伍的最后面,教官又從第2個(gè)人開始往隊(duì)伍后面的方向,相鄰的2個(gè)人進(jìn)行身高對(duì)比,如果前面的人比后一個(gè)人高則兩人交換位置,最后最高的人排在了隊(duì)伍的最后面。

由于前面的排序過程已經(jīng)選出了隊(duì)伍里身高最高的人,所以后面的排序過程不對(duì)已經(jīng)排好序的進(jìn)行對(duì)比,最后教官重復(fù)上面的步驟最終將隊(duì)伍按身高從低到高的排好序。教官所用的排序算法正是冒泡排序算法,時(shí)間復(fù)雜度是O(n^2)。

冒泡排序的實(shí)現(xiàn)

現(xiàn)在我們用C++實(shí)現(xiàn)冒泡排序算法,定義一個(gè)模板類,聲明冒泡排序算法函數(shù)。

template《typename T》 class Sort{ public: void bubble_sort(T *arr, int size); //冒泡排序 };

冒泡排序?qū)崿F(xiàn)代碼如下:

//冒泡排序 template《typename T》 void Sort《T》::bubble_sort(T *arr, int size) { if(arr == nullptr || size 《= 0){ return; } T temp; for(int i = 0; i 《 size; i++){ for(int j = 0; j 《 size - i; j++){ if(arr[j] 》 arr[j + 1]){ temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } }

02

交換排序

如何理解交換排序

前面教官使用了冒泡排序?qū)﹃?duì)伍進(jìn)行了整理,已經(jīng)按照身高從低到高的排序,但是從排序過程可以看出冒泡排序每個(gè)人互相進(jìn)行過對(duì)比,做了不必要的重復(fù)工作,類似于這種a和b對(duì)比,b和a又進(jìn)行對(duì)比。教官覺得這個(gè)排序算法效率不高,想要消除不必要的重復(fù)工作,于是又想到了一個(gè)排序算法。

教官先讓第1個(gè)個(gè)人走出隊(duì)列,從第2個(gè)人開始第1個(gè)人依次和隊(duì)伍里剩下的人進(jìn)行對(duì)比,遇到比第1個(gè)人矮則互相交換位置,并且身高更矮的人繼續(xù)執(zhí)行剩余人的身高對(duì)比,最后對(duì)比完整個(gè)隊(duì)伍,找出了最矮的人,將最矮的人放在第1位。

接下來教官讓第2個(gè)人走出來,從第3個(gè)人開始依次和隊(duì)伍里剩下的人進(jìn)行對(duì)比,遇到比第2個(gè)人更矮的人和第一個(gè)人的處理方式一樣,最后找到次矮的人,將次矮的人放在了第2的位置。

最后教官重復(fù)上面的步驟,依次讓第3、4、5.。。。。.n-1個(gè)人走出隊(duì)列依次和隊(duì)伍里剩下的人進(jìn)行身高對(duì)比,放在合適的位置。這種排序算法稱為交換排序,第1個(gè)人進(jìn)行了(n-1)次對(duì)比,第2個(gè)人進(jìn)行了(n-2)次對(duì)比。。。。。。第n-1個(gè)人進(jìn)行了一次對(duì)比,所以時(shí)間復(fù)雜度是O(n^2)。

交換排序的實(shí)現(xiàn)

聲明交換排序函數(shù)

template《typename T》 class Sort{ public: void bubble_sort(T *arr, int size); //冒泡排序 void swap_sort(T *arr, int size); //交換排序 };

交換排序函數(shù)實(shí)現(xiàn)

//交換排序 template《typename T》 void Sort《T》::swap_sort(T *arr, int size) { if(arr == nullptr || size 《= 0){ return; } T temp; for(int i = 0; i 《 size - 1; i++){ for(int j = i + 1; j 《 size; j++){ if(arr[i] 》 arr[j]){ temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } }

03

插入排序

如何理解插入排序

教官還是覺得算法不理想,效率不夠高,無論是冒泡排序和交換排序在隊(duì)伍里原本就是有序的情況下都要進(jìn)行對(duì)比,那么有沒有一種排序算法在隊(duì)伍原本就是有序的情況下更快呢?教官最后想了很久終于想到了一種效率更高的排序算法。

教官把第1個(gè)人當(dāng)做只有1個(gè)人的隊(duì)伍并且是有序的,讓第2個(gè)人走出隊(duì)伍,和第1個(gè)人進(jìn)行對(duì)比身高,如果第2個(gè)人比第1個(gè)人矮那么第1個(gè)人就放到第2個(gè)人的位置,第2個(gè)人到第1個(gè)人的位置。進(jìn)行過這一輪對(duì)比我們就知道,第1個(gè)人和第2個(gè)人是有序排列的。

同樣的,教官又叫第3個(gè)人走出隊(duì)列,從第2個(gè)人開始依次往前進(jìn)行身高對(duì)比,比第3個(gè)人身高更高的人就往后挪一個(gè)位置,直到遇到身高比第3個(gè)人矮的人則停止對(duì)比,將第3個(gè)人排在這個(gè)人的身后。

最后教官依次讓第4、5、6.。。。。的人走出隊(duì)伍和上面的步驟一樣依次和前面的進(jìn)行身高對(duì)比,找到合適的位置就插入,直到所有人從低到高的排序。時(shí)間復(fù)雜度是O(N^2),但是如果隊(duì)伍原本就是從低到高的排列,那么時(shí)間復(fù)雜度是O(N)。

插入排序代碼實(shí)現(xiàn)

教官所用的身高排序算法正是插入排序算法,現(xiàn)在我們用C++代碼實(shí)現(xiàn)插入排序算法,插入排序函數(shù)聲明如下。

template《typename T》 class Sort{ public: void insert_sort(T *arr, int size); //插入排序 void bubble_sort(T *arr, int size); //冒泡排序 void swap_sort(T *arr, int size); //交換排序 };

這里我們定義一個(gè)模板類,聲明插入排序算法,插入排序算法實(shí)現(xiàn)代碼如下:

//從小到大排序 template《typename T》 void Sort《T》::insert_sort(T *arr, int size){ if(arr == nullptr || size 《= 0){ return; } int i = 1; int j = 0; while(i 《 size){ T data = arr[i]; j = i - 1; while(j 》= 0 && arr[j] 》 data){ arr[j + 1] = arr[j]; //大的數(shù)據(jù)則往后挪 j--; } if(j 《 0){ j = 0; } arr[j] = data; i++; } }

04

結(jié)果驗(yàn)證

現(xiàn)在我們寫一個(gè)小程序驗(yàn)證一下算法的正確性。

int main() { int arr[10] = {8, 3, 21, 5, 6, 2, 3, 8, 1, 43}; Sort《int》 sort; std::cout 《《 “插入排序結(jié)果” 《《 std::endl; sort.insert_sort(arr, 10); //插入排序 for(int e : arr){ std::cout 《《 e 《《 “ ”; } std::cout 《《 std::endl; int arr2[10] = {8, 32, 56, 5, 7, 8, 98, 78, 6, 7}; sort.bubble_sort(arr2, 10); //冒泡排序 std::cout 《《 “冒泡排序結(jié)果” 《《 std::endl; for(int e : arr2){ std::cout 《《 e 《《 “ ”; } std::cout 《《 std::endl; int arr3[10] = {8, 4, 2, 3, 5, 6, 8, 3, 10, 50}; sort.swap_sort(arr3, 10); //交換排序 std::cout 《《 “交換排序結(jié)果” 《《 std::endl; for(int e : arr3){ std::cout 《《 e 《《 “ ”; } std::cout 《《 std::endl; return 0; }

編譯運(yùn)行輸出如下:

插入排序結(jié)果 1 3 6 8 21 21 21 21 43 43 冒泡排序結(jié)果 0 5 6 7 7 8 8 32 56 78 交換排序結(jié)果 2 3 3 4 5 6 8 8 10 50

輸出結(jié)果完全正確,算法實(shí)現(xiàn)正確。

編輯:jq

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

    關(guān)注

    3

    文章

    4406

    瀏覽量

    66841
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2122

    瀏覽量

    76714
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4941

    瀏覽量

    73151

原文標(biāo)題:數(shù)據(jù)結(jié)構(gòu)與算法篇-冒泡排序、交換排序和插入排序

文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    拼多多商品列表API使用指南

    商品。 分類篩選:按商品類目進(jìn)行篩選。 價(jià)格排序:按商品價(jià)格進(jìn)行升序或降序排列。 銷量排序:按商品銷量進(jìn)行排序。 分頁查詢:支持大數(shù)據(jù)量的分頁獲取。 2.公共請(qǐng)求地址:c0b.cc/R4rbK2 。 二、Python請(qǐng)求示例 以
    的頭像 發(fā)表于 11-29 15:17 ?390次閱讀

    C語言的常見算法

    ; } } ``` ### 插入排序 (Insertion Sort) ```c void insertionSort(int arr[], int n) { for (int i = 1; i < n
    發(fā)表于 11-24 08:29

    1688 拍立淘接口實(shí)戰(zhàn):從圖像優(yōu)化、工廠排序到供應(yīng)鏈匹配(附可跑代碼)

    深耕B2B電商十余年,親歷1688拍立淘接口20+坑:從圖像預(yù)處理、權(quán)限申請(qǐng)到工廠排序。本文詳解核心參數(shù)、實(shí)戰(zhàn)代碼及多圖驗(yàn)證、定制方案生成等高級(jí)技巧,助你實(shí)現(xiàn)“看圖找廠”精準(zhǔn)匹配,附可運(yùn)行代碼,新手也能少走兩年彎路。
    的頭像 發(fā)表于 10-09 10:39 ?290次閱讀

    Microchip EV28J28A超聲波電源評(píng)估板技術(shù)解析與應(yīng)用指南

    Microchip Technology EV28J28A 超聲波電源評(píng)估板具有超聲波脈沖發(fā)生器和多路復(fù)用器演示所需的所有電壓軌。該評(píng)估板提供電源排序和故障保護(hù)。EV28J28A評(píng)估板還支持外部同步。該板可自動(dòng)處理脈沖發(fā)生器演示板所需的上電和掉電排序。
    的頭像 發(fā)表于 10-06 16:07 ?1027次閱讀
    Microchip EV28J28A超聲波電源評(píng)估板技術(shù)解析與應(yīng)用指南

    使用env工具 生成的mdk工程 中的 頭文件路徑太亂了怎么解決?

    能不能按照相似路徑歸類排序?
    發(fā)表于 09-16 07:46

    Texas Instruments TPS743低壓差 (LDO) 線性穩(wěn)壓器數(shù)據(jù)手冊(cè)

    和內(nèi)核引腳之間ESD結(jié)構(gòu)的應(yīng)力。借助電源良好輸出和使能輸入,可使用外部穩(wěn)壓器輕松實(shí)現(xiàn)排序。借助這種靈活性,用戶可以配置解決方案,滿足DSP、FPGA和其他具有特殊啟動(dòng)要求的應(yīng)用的排序要求。
    的頭像 發(fā)表于 07-04 15:41 ?823次閱讀
    Texas Instruments TPS743低壓差 (LDO) 線性穩(wěn)壓器數(shù)據(jù)手冊(cè)

    國際首創(chuàng)新突破!中國團(tuán)隊(duì)以存算一體排序架構(gòu)攻克智能硬件加速難題

    2025 年 6 月 25 日,北京大學(xué)團(tuán)隊(duì)在智能計(jì)算硬件方面取得領(lǐng)先突破,國際上首次實(shí)現(xiàn)了基于存算一體技術(shù)的高效排序硬件架構(gòu) (A fast and reconfigurable
    的頭像 發(fā)表于 07-02 16:50 ?549次閱讀
    國際首創(chuàng)新突破!中國團(tuán)隊(duì)以存算一體<b class='flag-5'>排序</b>架構(gòu)攻克智能硬件加速難題

    Analog Devices Inc. MAX16895 監(jiān)控電路特性/應(yīng)用/功能圖

    Analog Devices MAX16895監(jiān)控電路是小型、低功耗、電壓監(jiān)控電路,具有排序功能。這些器件具有可調(diào)的、低至0.5V的電壓監(jiān)控閾值,并可利用外部電容調(diào)節(jié)延遲時(shí)間。這些Analog Devices器件非常適合用于電源排序、復(fù)位
    的頭像 發(fā)表于 06-26 09:34 ?554次閱讀
    Analog Devices Inc. MAX16895 監(jiān)控電路特性/應(yīng)用/功能圖

    技術(shù)干貨 德思特ADC/DAC靜態(tài)參數(shù)分析系列(一)——什么是ADC轉(zhuǎn)換點(diǎn)?

    本文將引領(lǐng)您深入理解ADC(模數(shù)轉(zhuǎn)換器)中的一個(gè)關(guān)鍵概念——轉(zhuǎn)換點(diǎn),并介紹跳變點(diǎn)搜索法和排序代碼方法。
    的頭像 發(fā)表于 05-30 11:17 ?512次閱讀
    技術(shù)干貨 德思特ADC/DAC靜態(tài)參數(shù)分析系列(一)——什么是ADC轉(zhuǎn)換點(diǎn)?

    低成本電源排序器解決方案

    絕大多數(shù)負(fù)載點(diǎn)DC-DC轉(zhuǎn)換器可以將上一個(gè)轉(zhuǎn)換器的電源就緒輸出連接至下一個(gè)轉(zhuǎn)換器的使能輸入,實(shí)現(xiàn)上電排序。這種方法只適合比較簡單的設(shè)計(jì),不能滿足多數(shù)現(xiàn)代微處理器和DSP的要求一這類器件要求斷電順序必須與上電順序相反。許多廠商針對(duì)這類應(yīng)用推出了可編程排序IC,但器件價(jià)格較為
    的頭像 發(fā)表于 05-21 09:55 ?964次閱讀
    低成本電源<b class='flag-5'>排序</b>器解決方案

    UCD9224 2 MHz、2 軌、4 相數(shù)字 PWM 降壓控制器,具有改進(jìn)的排序功能技術(shù)資料

    和管理。 UCD9224 旨在為非隔離式 DC/DC 轉(zhuǎn)換器應(yīng)用提供各種理想的功能,同時(shí)通過減少外部電路來最大限度地減少系統(tǒng)組件總數(shù)。該解決方案將多回路管理與排序、裕度、跟蹤和智能相位管理集成在一起,以優(yōu)化整體系統(tǒng)效率。此外,還支持環(huán)路補(bǔ)償和校準(zhǔn),無需添加外部元件。
    的頭像 發(fā)表于 03-28 15:44 ?564次閱讀
    UCD9224 2 MHz、2 軌、4 相數(shù)字 PWM 降壓控制器,具有改進(jìn)的<b class='flag-5'>排序</b>功能技術(shù)資料

    TPS74701-Q1 具有電源正常功能的汽車類 500mA、低 VIN (0.8V)、可調(diào)超低壓差穩(wěn)壓器數(shù)據(jù)手冊(cè)

    型的處理器和 ASIC 供電而設(shè)計(jì)。使能輸入和電源就緒輸出允許使用外部穩(wěn)壓器輕松排序,從而允許配置滿足具有特殊啟動(dòng)要求的廣泛應(yīng)用的排序要求的解決方案。
    的頭像 發(fā)表于 03-06 14:46 ?870次閱讀
    TPS74701-Q1 具有電源正常功能的汽車類 500mA、低 VIN (0.8V)、可調(diào)超低壓差穩(wěn)壓器數(shù)據(jù)手冊(cè)

    CS1237數(shù)據(jù)跳動(dòng)幫忙看看是什么原因造成的?

    公司項(xiàng)目, 用CS1237 稱重 有兩個(gè)問題: 第一情況:輸出速度只能選擇00和01 大于01.寫入和讀取就一致 所以項(xiàng)目現(xiàn)在用的是0x1C 第二:有傳感器插入,但是是沒有物品的時(shí)候 連續(xù)讀10次
    發(fā)表于 02-17 10:43

    詳解Linux sort命令之掌握排序技巧與實(shí)用案例

    在linux系統(tǒng)使用過程中,提供了sort排序命令,支持常用的排序功能。 常用參數(shù) sort命令支持很多參數(shù),常用參數(shù)如下: ? 短參數(shù) 長參數(shù) 說明 -n – number-sort 按字符串?dāng)?shù)值
    的頭像 發(fā)表于 01-09 10:10 ?1582次閱讀

    TimSort:一個(gè)在標(biāo)準(zhǔn)函數(shù)庫中廣泛使用的排序算法

    在計(jì)算機(jī)科學(xué)的領(lǐng)域,排序算法是每位學(xué)生必學(xué)的基礎(chǔ),而排序的需求是每位程序員在編程過程中都會(huì)遇到的。 在你輕松調(diào)用 .sort() 方法對(duì)數(shù)據(jù)進(jìn)行排序時(shí),是否曾好奇過,這個(gè)簡單的方法背后使用的是哪種
    的頭像 發(fā)表于 01-03 11:42 ?956次閱讀