欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

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

Android編程精選 ? 來源:編程學習總站 ? 作者:寫代碼的牛頓 ? 2021-06-18 09:57 ? 次閱讀

01

冒泡排序

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

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

如何理解冒泡排序

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

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

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

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

現(xiàn)在我們用C++實現(xiàn)冒泡排序算法,定義一個模板類,聲明冒泡排序算法函數(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ū)﹃犖檫M行了整理,已經(jīng)按照身高從低到高的排序,但是從排序過程可以看出冒泡排序每個人互相進行過對比,做了不必要的重復(fù)工作,類似于這種a和b對比,b和a又進行對比。教官覺得這個排序算法效率不高,想要消除不必要的重復(fù)工作,于是又想到了一個排序算法。

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

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

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

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

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

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

交換排序函數(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

插入排序

如何理解插入排序

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

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

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

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

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

教官所用的身高排序算法正是插入排序算法,現(xiàn)在我們用C++代碼實現(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); //交換排序 };

這里我們定義一個模板類,聲明插入排序算法,插入排序算法實現(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é)果驗證

現(xià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; }

編譯運行輸出如下:

插入排序結(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é)果完全正確,算法實現(xiàn)正確。

編輯:jq

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

    關(guān)注

    3

    文章

    4346

    瀏覽量

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

    關(guān)注

    22

    文章

    2114

    瀏覽量

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

    關(guān)注

    30

    文章

    4834

    瀏覽量

    69115

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

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

    TimSort:一個在標準函數(shù)庫中廣泛使用的排序算法

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

    時間復(fù)雜度為 O(n^2) 的排序算法

    作者:京東保險 王奕龍 對于小規(guī)模數(shù)據(jù),我們可以選用時間復(fù)雜度為 O(n2) 的排序算法。因為時間復(fù)雜度并不代表實際代碼的執(zhí)行時間,它省去了低階、系數(shù)和常數(shù),僅代表的增長趨勢,所以在小規(guī)模數(shù)據(jù)情況下
    的頭像 發(fā)表于 10-19 16:31 ?1258次閱讀
    時間復(fù)雜度為 O(n^2) 的<b class='flag-5'>排序</b>算法

    TPS54120排序和跟蹤

    電子發(fā)燒友網(wǎng)站提供《TPS54120排序和跟蹤.pdf》資料免費下載
    發(fā)表于 10-10 10:54 ?0次下載
    TPS54120<b class='flag-5'>排序</b>和跟蹤

    手把手教你排序算法怎么寫

    今天以直接插入排序算法,給大家分享一下排序算法的實現(xiàn)思路,主要包含以下部分內(nèi)容:插入排序介紹插入排序算法實現(xiàn)手把手教你排序算法怎么寫在添加新
    的頭像 發(fā)表于 06-04 08:03 ?785次閱讀
    手把手教你<b class='flag-5'>排序</b>算法怎么寫

    具有先進排序和輸出裕度的中輸入同步降壓控制器TPS40101數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《具有先進排序和輸出裕度的中輸入同步降壓控制器TPS40101數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 04-22 10:26 ?0次下載
    具有先進<b class='flag-5'>排序</b>和輸出裕度的中輸入同步降壓控制器TPS40101數(shù)據(jù)表

    具有先進排序和輸出裕度的中輸入同步降壓控制器TPS40100數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《具有先進排序和輸出裕度的中輸入同步降壓控制器TPS40100數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 04-17 10:59 ?0次下載
    具有先進<b class='flag-5'>排序</b>和輸出裕度的中輸入同步降壓控制器TPS40100數(shù)據(jù)表

    3-A、3.3/5V輸入、可調(diào)開關(guān)穩(wěn)壓器,具有自動跟蹤TM排序功能PTH04000W數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《3-A、3.3/5V輸入、可調(diào)開關(guān)穩(wěn)壓器,具有自動跟蹤TM排序功能PTH04000W數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 04-17 09:32 ?0次下載
    3-A、3.3/5V輸入、可調(diào)開關(guān)穩(wěn)壓器,具有自動跟蹤TM<b class='flag-5'>排序</b>功能PTH04000W數(shù)據(jù)表

    Linux的sort命令介紹

    1.命令簡介以行為單位對文本文件的內(nèi)容進行排序,將結(jié)果顯示在標準輸出,比較原則是從行首字符向后,依次按 ASCII 碼值進行比較,最后按升序輸出。如果 file 參數(shù)指定多個文件,那么 sort
    發(fā)表于 04-08 07:16

    支持 ACPI 的 10 軌電源排序器和監(jiān)視器UCD9090A數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《支持 ACPI 的 10 軌電源排序器和監(jiān)視器UCD9090A數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 03-29 09:12 ?0次下載
    支持 ACPI 的 10 軌電源<b class='flag-5'>排序</b>器和監(jiān)視器UCD9090A數(shù)據(jù)表

    FPGA實現(xiàn)雙調(diào)排序方法詳解

    根據(jù)數(shù)據(jù)流的關(guān)系,我們可以采用單路徑延遲反饋(Single-pathDelay Feedback, SDF)運算單元流水結(jié)構(gòu),SDF單元如下圖所示。
    發(fā)表于 03-28 10:45 ?588次閱讀
    FPGA實現(xiàn)雙調(diào)<b class='flag-5'>排序</b>方法詳解

    用FPGA實現(xiàn)雙調(diào)排序的方法(2)

    典型的排序算法包括冒泡排序、選擇排序、插入排序、歸并排序、快速
    的頭像 發(fā)表于 03-21 10:28 ?694次閱讀
    用FPGA實現(xiàn)雙調(diào)<b class='flag-5'>排序</b>的方法(2)

    FPGA實現(xiàn)雙調(diào)排序算法的探索與實踐

    雙調(diào)排序(BitonicSort)是數(shù)據(jù)獨立(Data-independent)的排序算法,即比較順序與數(shù)據(jù)無關(guān),特別適合并行執(zhí)行。在了解雙調(diào)排序算法之前,我們先來看看什么是雙調(diào)序列。
    發(fā)表于 03-14 09:50 ?719次閱讀
    FPGA實現(xiàn)雙調(diào)<b class='flag-5'>排序</b>算法的探索與實踐

    想聽聽48和大對數(shù)光纜的排序

    48芯光纜和大對數(shù)光纜都是光纜中的一種,它們的區(qū)別在于芯數(shù)不同。48芯光纜指的是光纜中包含48根光纖,而大對數(shù)光纜則是指光纜中芯數(shù)超過了48芯。 在實際的光纜應(yīng)用中,不同芯數(shù)的光纜需要進行不同的排序
    的頭像 發(fā)表于 03-12 10:44 ?713次閱讀

    C語言實現(xiàn)經(jīng)典排序算法概覽

    冒泡排序(英語:Bubble Sort)是一種簡單的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序(如從大到小、首字母從A到Z)錯誤就把他們
    的頭像 發(fā)表于 02-25 12:27 ?490次閱讀
    C語言實現(xiàn)經(jīng)典<b class='flag-5'>排序</b>算法概覽