女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

解析數據結構的常用七大排序算法

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 作者:C語言編程學習基地 ? 2022-03-16 08:22 ? 次閱讀

為了讓大家掌握多種排序方法的基本思想,本篇文章帶著大家對數據結構的常用七大算法進行分析:包括直接插入排序、希爾排序、冒泡排序、快速排序、簡單選擇排序、堆排序、歸并排序等,并能夠用高級語言實現。

98eaffd2-a485-11ec-952b-dac502259ad0.png

希望通過對這些算法效率的比較,加深對算法的理解。

①插入排序

②折半插入排序

③選擇排序

④起泡排序

⑤快速排序

⑥希爾排序

⑦堆排序

⑧歸并排序

排序算法的分析圖解:

99096724-a485-11ec-952b-dac502259ad0.png

992d7092-a485-11ec-952b-dac502259ad0.png

994134f6-a485-11ec-952b-dac502259ad0.png

995b341e-a485-11ec-952b-dac502259ad0.png

996dc1d8-a485-11ec-952b-dac502259ad0.png

998181f0-a485-11ec-952b-dac502259ad0.png

99a67c08-a485-11ec-952b-dac502259ad0.png

用隨機數(介于1-100)產生10個待排序數據元素的關鍵字值)。

① 采用直接插入排序和希爾排序方法對上述待排數據進行排序并輸出序后的有序序列;

② 采用冒泡排序、快速排序方法對上述待排數據進行排序并輸出序后的有序序列;

③ 采用簡單選擇排序、堆排序方法對上述待排數據進行排序并輸出序后的有序序列;

④ 采用歸并排序方法對上述待排數據進行排序并輸出排序后的有序序列;

代碼分析

頭文件:

#include#include#include
#define MAXSIZE 100
using namespace std;
typedef int KeyType;typedef int InfoType;
typedef struct{    KeyType key;    InfoType otherinfo;}RedType;
typedef struct{    RedType r[MAXSIZE+1];    int length;}SqList;

①插入排序

void InsertSort(SqList &L){    int i,j,a=0,b=0;    for(i=1;i<=L.length;++i)    {        if(L.r[i].key-1].key)        {            L.r[0]=L.r[i];            L.r[i]=L.r[i-1];            a++;        }        for(j=i-2;L.r[0].key            L.r[j+1]=L.r[j];b++;        L.r[j+1]=L.r[0];    }    cout<<"比較次數:"<"移動次數:"<endl;}

99c4c80c-a485-11ec-952b-dac502259ad0.png

②折半插入排序

void BInsertSort(SqList &L){    int low,high,m;    for(int i=2;i<=L.length;++i)    {        L.r[0]=L.r[i];        low=1;high=i-1;        while(low<=high)        {            m=(low+high)/2;            if(L.r[0].key-1;            else low=m+1;        }        for(int j=i-1;j>=high+1;--j)            L.r[j+1]=L.r[j];        L.r[high+1]=L.r[0];    }}

99d5feba-a485-11ec-952b-dac502259ad0.png

③選擇排序

void SelectSort(SqList &L){    int j,k;    for(int i=1;i<=L.length;++i)    {        k=i;        for(j=i+1;j<=L.length;j++)            if(L.r[j].key        if(k!=i)        {            L.r[0].key=L.r[i].key;            L.r[i].key=L.r[k].key;            L.r[k].key=L.r[0].key;        }    }}

99f30302-a485-11ec-952b-dac502259ad0.png

④起泡排序

void BubbleSort(SqList &L){    int i,j;    for(i=1;i<=L.length;++i)    {        for(j=1;j1;++j)        {            if(L.r[j+1].key            {                L.r[0].key=L.r[j].key;                L.r[j].key=L.r[j+1].key;                L.r[j+1].key=L.r[0].key;            }        }    }}

9a029db2-a485-11ec-952b-dac502259ad0.png

⑤快速排序

int Partition(SqList &L,int low,int high){    L.r[0]=L.r[low];    KeyType pivotkey=L.r[low].key;    while(low    {        while(low=pivotkey)--high;        L.r[low]=L.r[high];        while(low        L.r[high]=L.r[low];    }    L.r[low]=L.r[0];    return low;}
void QSort(SqList &L,int low,int high){    if(low    {        int pivotloc=Partition(L,low,high);        QSort(L,low,pivotloc-1);        QSort(L,pivotloc+1,high);    }}

9a16d67e-a485-11ec-952b-dac502259ad0.png

⑥希爾排序

void ShellInsert(SqList &L,int dk){        int i,j;        for(i=dk+1;i<=L.length;++i)        {            if(L.r[i].key0]=L.r[i];            for(j=i-dk;j>0&&L.r[0].key                L.r[j+dk]=L.r[j];            L.r[j+dk]=L.r[0];            }        }}
void ShellSort(SqList &L,int dlta[],int t){    for(int k=0;k        ShellInsert(L,dlta[k]);}

9a327da2-a485-11ec-952b-dac502259ad0.png

⑦堆排序

typedef SqList HeapType;void HeapAdjust(HeapType &H,int s,int m){    RedType rc=H.r[s];int j;    for(j=2*s;j<=m;j*=2)    {        if(j1].key)++j;        if(!(rc.keybreak;        H.r[s]=H.r[j];s=j;    }    H.r[s]=rc;}void HeapSort(HeapType &H){    int i;    RedType temp;    for(i=H.length/2;i>0;--i)        HeapAdjust(H,i,H.length);    for(i=H.length;i>1;--i)    {        temp=H.r[1];        H.r[1]=H.r[i];        H.r[i]=temp;        HeapAdjust(H,1,i-1);    }

9a543316-a485-11ec-952b-dac502259ad0.png

⑧歸并排序

void Merge(RedType SR[],RedType &TR[],int i,int m,int n){    int j,k;    for(j=m+1,k=i;i<=m&&j<=n;++k)    {        if(SR[i].key<=SR[j].key)            TR[k]=SR[i++];        else            TR[k]=SR[j++];    }    int t;    if(i<=m)    {        for(t=i;t<=m;t++)            TR[k+t-i]=SR[t];    }    if(j<=n)    {        for(t=j;t<=m;t++)            TR[k+t-j]=SR[t];    }}
void MSort(RedType SR[],RedType *TR1,int s,int t){    int m;    RedType TR2[MAXSIZE+1];    if(s==t)TR1[s]=SR[s];    else{        m=(s+t)/2;        MSort(SR,TR2,s,m);        MSort(SR,TR2,m+1,t);        Merge(TR2,TR1,s,m,t);    }}void MergeSort(SqList &L){    MSort(L.r,L.r,1,L.length);}

9a6c4c8a-a485-11ec-952b-dac502259ad0.png

隨機生成函數

void RandSqList(SqList &L){    int n,max,min;    printf("輸入順序表的大小
");    cin>>n;    printf("輸入最小值和最大值
");    cin>>min>>max;    L.length=n;    printf("隨機產生%d個數
",n);    for(int i=1;i<=L.length;++i)    {        L.r[i].key=rand()%(max-min+1);        L.r[i].key+=min;    }    printf("順序表創建成功!
");}

輸出函數

結論

(1)若n較小(例如n<50),可采用直接插入排序、冒泡排序或簡單選擇排序。如果記錄中的數據較多,移動較費時的,應采取簡單選擇排序法。

(2)若記錄的初始狀態已經按關鍵碼基本有序,則選用直接插入排序或冒泡排序法為宜。

(3)若n較大,則應采用改進排序方法,如快速排序、堆排序或歸并排序法。這些排序算法的時間復雜度均為O(nlog2n),但就平均性能而言,快速排序被認為是目前基于比較記錄關鍵碼的內部排序中最好的排序方法,但遺憾的是,快速排序在最壞情況下的時間復雜度是O(n2),堆排序與歸并排序的最壞情況時間復雜度仍為O(nlog2n)。堆排序和快速排序法都是不穩定的排序。若要求穩定排序,則可選用歸并排序。

(4)基數排序可在O (d×n) 時間內完成對n個記錄的排序,d是指單邏輯關鍵碼的個數,一般遠少于n。但基數排序只適用于字符串和整數這類有明顯結構特征的關鍵碼。

(5)前面討論的排序算法,除基數排序外,都是在順序存儲上實現的。當記錄本身的信息量很大時,為避免大量時間用在移動數據上,可以用鏈表作為存儲結構。插入排序和歸并排序都易在鏈表上實現,但有的排序方法,如快速排序和堆排序在鏈表上卻很難實現。

寫在最后:對于準備學習C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內功)不妨從現在開始!

整理分享(多年學習的源碼、項目實戰視頻、項目筆記,基礎入門教程

歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!

原文標題:知識分享:數據結構常用 7 種排序算法(無基數排序),建議收藏

文章出處:【微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。


審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4698

    瀏覽量

    94720
  • 代碼
    +關注

    關注

    30

    文章

    4886

    瀏覽量

    70245
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    40597

原文標題:知識分享:數據結構常用 7 種排序算法(無基數排序),建議收藏

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    數據結構算法分析(Java版)(pdf)

    數據結構算法分析(Java版)(pdf)http://www.ibeifeng.com/read.php?tid=4812&u=73481【中文】Java數據結構算法中文第
    發表于 12-20 21:22

    數據結構算法分析

    數據結構算法分析
    發表于 06-05 10:46

    Java常用排序算法&程序員必須掌握的8大排序算法+二分法查找

    Java常用排序算法&程序員必須掌握的8大排序算法+二分法查找
    發表于 10-19 19:33

    java基礎:Java七大外企經典面試精講視頻

    基礎的Java七大外企經典面試精講視頻,需要的朋友可以作為參考!課程目錄:1、 String Stringbuffer Stringbuilder 深度解析2、 完美回答面試題Int 與Integer的區別3
    發表于 06-29 15:00

    數據結構的幾個重要知識點

    線性結構、樹形結構、圖狀結構常用數據結構有:數組、鏈表、堆棧、樹、圖等,常用
    發表于 02-27 15:01

    學習排序算法以及部分其它的數據結構算法到底有沒有用

    這篇不是寫技術細節的,而是在之前學過的排序算法以及部分其它的數據結構算法之后,個人的一些感覺,主要包括兩個方面:怎么去學習這些枯燥的東西?學習這個到底有沒有用?遙想當年,在我還年輕的
    發表于 12-21 06:40

    現代計算機常用數據結構算法

    本書對現代計算機常用數據結構算法進行全面而深入的介紹,系統地介紹了常用數據結構和計算機算法
    發表于 10-24 12:36 ?0次下載

    C#數據結構算法分析_ 魏寶剛

    數據結構算法分析》描述了各種類型的數據結構,包括線性表、樹、堆、圖,以及查找、排序算法。自始至終將
    發表于 12-15 16:46 ?0次下載
    C#<b class='flag-5'>數據結構</b>和<b class='flag-5'>算法</b>分析_ 魏寶剛

    數據結構算法

    全國C語言考試公共基礎知識點——數據結構算法,該資料包含了有關數據結構算法的全部知識點。
    發表于 03-30 14:27 ?0次下載

    數據結構常見的八大排序算法

    本文總結了數據結構常見的八大排序算法。詳細分析請看下文
    發表于 02-05 15:26 ?1888次閱讀
    <b class='flag-5'>數據結構</b>常見的八<b class='flag-5'>大排序</b><b class='flag-5'>算法</b>

    大牛分享平時如何學習數據結構算法

    數據結構算法的地位對于一個程序員來說不言而喻。今天這篇文章不是來勸你們學習數據結構算法的,也不是來和你們說數據結構
    的頭像 發表于 11-02 11:25 ?3163次閱讀

    程序員的內功:C語言八大排序算法

    一 前言 如果說各種編程語言是程序員的招式,那么數據結構算法就相當于程序員的內功。 想寫出精煉、優秀的代碼,不通過不斷的錘煉,是很難做到的。 二 八大排序算法
    的頭像 發表于 10-26 10:33 ?2336次閱讀
    程序員的內功:C語言八<b class='flag-5'>大排序</b><b class='flag-5'>算法</b>

    算法數據結構基礎知識分享(上)

    有哪些常見的數據結構?基本操作是什么?常見的排序算法是如何實現的?各有什么優缺點?本文簡要分享算法基礎、常見的數據結構以及
    的頭像 發表于 04-06 16:48 ?968次閱讀
    <b class='flag-5'>算法</b>和<b class='flag-5'>數據結構</b>基礎知識分享(上)

    算法數據結構基礎知識分享(中)

    有哪些常見的數據結構?基本操作是什么?常見的排序算法是如何實現的?各有什么優缺點?本文簡要分享算法基礎、常見的數據結構以及
    的頭像 發表于 04-06 16:48 ?766次閱讀
    <b class='flag-5'>算法</b>和<b class='flag-5'>數據結構</b>基礎知識分享(中)

    算法數據結構基礎知識分享(下)

    有哪些常見的數據結構?基本操作是什么?常見的排序算法是如何實現的?各有什么優缺點?本文簡要分享算法基礎、常見的數據結構以及
    的頭像 發表于 04-06 16:48 ?910次閱讀
    <b class='flag-5'>算法</b>和<b class='flag-5'>數據結構</b>基礎知識分享(下)