亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

常見排序算法總結(jié)

2019-11-10 20:22:10
字體:
供稿:網(wǎng)友

前言

本文將介紹常見的9種排序算法,圍繞下面幾個(gè)問題討論每一種排序算法:

這個(gè)算法的思想是什么?這個(gè)算法的穩(wěn)定性怎樣?時(shí)間復(fù)雜度是多少?在什么情況下,算法出現(xiàn)最好情況or最壞情況?這個(gè)算法的具體實(shí)現(xiàn)?

以下排序算法都以從小到大排序

1.冒泡排序(交換排序)

1.1算法思想:

排序每次對(duì)相鄰的兩個(gè)元素比較,如果它們的相對(duì)排列次序與所希望的不符,便交換它們的次序,這樣,各元素就會(huì)像水中冒氣泡一樣通過交換它們的位置得到最終正確的位置.升序時(shí),每次都把最大的元素放到n-i-1個(gè)元素的位置上,每次遍歷的元素個(gè)數(shù)-1;

1.2 時(shí)間復(fù)雜度

最好的情況下:正序有序,則只需要比較n次,故為O(n) 最壞情況下:逆序有序,則需要比較(n-1)+(n-2)+…….+1,故為O(n*n)

1.3 穩(wěn)定性

排序過程中只交換兩個(gè)元素的位置,因此,當(dāng)兩個(gè)數(shù)相等時(shí),是沒有必要交換兩個(gè)數(shù)的位置的,所以,它們相對(duì)位置并沒有改變,冒泡算法是穩(wěn)定的。

1.4代碼實(shí)現(xiàn)

void BubbleSort(int a[],int n) //升序時(shí),每次把最大的放到n-i-1個(gè)元素的位置上,每次遍歷的元素個(gè)數(shù)-1;{ int i,j,k; for(i=0;i<n;i++){ for(j=0;j<n-i-1;j++) { if(a[j] > a[j+1]) //比較找本趟最大關(guān)鍵字. { k=a[j]; //a[j]和a[j+1]交換 a[j]=a[j+1]; a[j+1]=k; } } }}

2.直接選擇排序(選擇排序)

2.1算法思想

首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續(xù)尋找最小的元素,然后放到排序序列的末尾。以此類推,直到所有的元素均排序完畢,具體的做法是:選擇最小的元素與未排列部分首部交換,使得序列的前面為有序。

2.2時(shí)間復(fù)雜度

最好的情況下,交換0次,但是每次都要找到最小的元素,因此大約把必須遍歷N*N次,因此為O(N*N),減少了交換次數(shù)?!?/p>

2.3穩(wěn)定性

由于每次都是選擇未排序序列A中最小元素x與A中第一個(gè)元素交換,因此跨距離了,很可能破壞了元素間的相對(duì)位置,因此選擇排序是不穩(wěn)定的.

2.4代碼實(shí)現(xiàn)

void SelectSort(int a[],int n){ int i,j,k,temp; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++){ //升序時(shí),每次把最小的放在最前面,每次遍歷的元素-1;從前面加 if(a[k] > a[j]) { k=j; } } if(k!=i) { temp = a[i]; a[i]=a[k]; a[j]=temp; } }}

3.直接插入排序(插入排序)

3.1算法思想

將一組數(shù)據(jù)分成兩組,分別將其稱為有序組和待插入組,每次從待插入組中取出一個(gè)元素,與有序組的元素進(jìn)行比較,并找到合適的位置,將該元素查到有序組中,就這樣,每次插入一個(gè)元素,有序組增加,待插入組減少,直到待插入組元素的個(gè)數(shù)為0,當(dāng)然,插入過程中涉及到了元素的移動(dòng)。

3.2算法時(shí)間復(fù)雜度

最好的情況下:正序有序(從小到大),這樣只需要比較n次,不需要移動(dòng),因此時(shí)間愛你復(fù)雜度為O(n); 最壞的情況下:逆序有序,這樣每一個(gè)元素就需要比較n次,共有n個(gè)元素,因此實(shí)際復(fù)雜復(fù)為O(n*n) 平均情況下:O(n*n)

3.3穩(wěn)定性

在插入排序中,K1是已排好序部分中的元素,當(dāng)K2與K1比較時(shí),直接插到K1的后面(沒有必要插入到K1的前面,這樣做還需要移動(dòng)元素),因此,插入排序是穩(wěn)定的.

代碼實(shí)現(xiàn)

void InsertSort(int *num,int n){ int i = 0; int j = 0; int tmp = 0; for(int i = 1;i < n;i++){ tmp = num[i]; //從待插組中取出第一個(gè)元素 j = i-1; while(j >= 0 && tmp < num[j]) //注意判斷條件為兩個(gè),j>=0為其邊界限制,第二個(gè)為插入判斷條件 { num[j+1] = num[j]; //若不是合適的位置,有序組元素向后移動(dòng). j--; } num[j+1] = tmp; //找到合適的位置,將元素插入. }}

4.快速排序(交換排序)

4.1算法思想

它是由冒泡排序改進(jìn)而來的,在待排序的n個(gè)記錄中取一個(gè)記錄(通常取第一個(gè)記錄),把該記錄放入適當(dāng)位置后,數(shù)據(jù)序列被此記錄劃分成兩部分,所有關(guān)鍵字比該關(guān)鍵字小的記錄放置在前一部分,所有比它大的記錄放置在后一部分,并把該記錄排在這兩部分的中間(稱為該記錄歸為),這個(gè)過程稱為一趟快速排序。

4.2算法復(fù)雜度

最好的情況下:因?yàn)槊看味紝⑿蛄谢譃閮刹糠?一般二分復(fù)雜度都和logN相關(guān)),故為O(N(*logN) 最壞的情況下:基本有序時(shí)m退化為冒泡排序,幾乎要比較N*N此,故為O(N*N)

4.3 穩(wěn)定性

由于每次都需要和中軸元素交換,因此原來的順序就可能被打亂,如5 3 3 4 3 8 9 10 11 會(huì)將3的順序打亂,所以說,快速排序是不穩(wěn)定的?!?/p>

4.4 代碼實(shí)現(xiàn)

void QuickSort(int a[],int low,int high){ int i=low,j=high; if(low <high) { int temp=a[low]; while( i < j ) { while(a[j] > temp && i < j){ j--; } a[i] = a[j]; while(a[i] <=temp && i<j){ i++; } a[j]=a[i]; } a[i]=temp; QuickSort(a,low,i-1); QuickSort(a,i+1,high); }}

5.歸并排序

5.1算法思想:將待排序的集合一分為二,直到排序集合就剩下一個(gè)元素為止,然后不斷合并兩個(gè)排好序的數(shù)組.(先分割后合并)

5.2算法時(shí)間復(fù)雜度

最好的情況下:一趟歸并需要n次,總共需要logN次,因此為O(N*logN) 最壞的情況下:接近于平均情況下,為O(N*logN) 說明:對(duì)長度為n的文件,需要進(jìn)行l(wèi)ogN趟二路歸并,每趟歸并的時(shí)間為O(n),故其時(shí)間復(fù)雜度無論是在最好情況下還是在最壞情況下均是O(nlogn).

5.3 穩(wěn)定性

歸并排序最大的特色就是它是一種穩(wěn)定的排序算法,歸并過程中是不會(huì)改變?cè)氐南鄬?duì)位置的。 缺點(diǎn):它需要O(n)的額外空間,但是很適合于多鏈表排序

5.4 代碼實(shí)現(xiàn)

int merge(int a[],int low,int mid,int high){ //對(duì)排好序的兩個(gè)分組進(jìn)行合并 int i=low,j=mid+1,p=0; int *temp=(int *)malloc(sizeof(int)); //開辟臨時(shí)數(shù)組存合并后的元素。 if(temp == NULL){ return -1; } while(i<=mid && j<=high){ temp[p++]=((a[i]<=a[j])?a[i++]:a[j++]); } while(i<=mid){ temp[p++]=a[i++]; } while(j<=high){ temp[p++]=a[j++]; } for(p=0,i=low;i<=high;i++,p++){ a[i]=temp[p]; } free(temp);}void mergeSort(int a[],int low,int high){ int mid=(low + high)/2; if(low < high) //說明此時(shí)只剩下一個(gè)元素,不用再分。 { mergeSort(a,low,mid); //對(duì)左邊的元素依然進(jìn)行分, mergeSort(a,mid+1,high); merge(a,low,mid,high); }}

如下圖所示: 這里寫圖片描述

6.希爾排序(插入排序)

6.1算法思想

希爾排序也是一種插入排序算法,實(shí)際上是一種分組插入方法,先取定一個(gè)小于n的整數(shù)d1作為第一個(gè)增量,把表的全部記錄分成d1個(gè)組,所有距離d1的倍數(shù)的記錄放在同一個(gè)組中,在各組內(nèi)進(jìn)行直接插入排序,然后,取第二個(gè)增量d2(

6.2 時(shí)間復(fù)雜度

最好情況:希爾排序的好壞和步長的選擇有關(guān),目前還沒有得出最好的步長如何選擇,因此最好情況下的算法時(shí)間復(fù)雜度不確定. 最壞情況下:O(N*logN) 平均情況下:O(N*logN)

6.3 穩(wěn)定性

由于多次插入排序,我們知道一次插入排序是穩(wěn)定的,不會(huì)改變vxiangt元素的相對(duì)順序,但是在不同的插入排序中,相同的元素可能在各自的插入排序中移動(dòng),最后穩(wěn)定性會(huì)被打亂,所以希爾排序是不穩(wěn)定的. 看一個(gè)簡單的例子: 以n=10的一個(gè)數(shù)組49,38,65,97,26,13,27,49,55,4為例 第一次gap = 10 /2 =5;

6.4 代碼實(shí)現(xiàn)

//完全按照定義實(shí)現(xiàn).void shellSort1(int a[],int n){ int i,j,gap; for(gap = n/2;gap > 0;gap/=2){ for(i=0;i<gap;i++){ for(j = i+gap;j<n;j+=gap){ if(a[j] < a[j-gap]){ int temp = a[j]; int k = j - gap; while(k >= 0 && a[k] > temp){ a[k+gap] = a[k]; k-=gap; } a[k+gap] = temp; } } } }}//簡化版的希爾排序,相當(dāng)于是所有的分組同時(shí)比較,比如說當(dāng)gap 為2時(shí),第一種方法是1,3,5,7,9插入排序完,在進(jìn)行2,4,6,8,10進(jìn)行排序,而當(dāng)前的方法是1,3排序完,接著排2,4然后又排,1,3,5,然后又是2,4,6,以此類推,所有的組同時(shí)進(jìn)行。void shellSort2(int a[],int n){ int j,gap; for(gap = n/2;gap > 0;gap /=2){ for(j = gap;j<n;j++){ if(a[j] < a[j - gap]){ int temp = a[j]; int k = j - gap; while(k >= 0 && a[k] > temp){ a[k+gap] = a[k]; k-=gap; } a[k + gap] = temp; } } }}

7.堆排

7.1算法解析

建初始堆(以頂堆為例),這一步驟把初始化序列建成了一個(gè)滿足大頂堆性質(zhì)的序列,且每顆子樹都滿足,這個(gè)時(shí)候堆頂是本序列中最大的元素,因此將最后一個(gè)元素和堆頂元素調(diào)換,把最大值放在最終的位置上,建立好了初始堆,就保留了排序時(shí)的比較結(jié)果,后面的調(diào)整都可以再此基礎(chǔ)上進(jìn)行,加快排序效率.由于每次將堆頂元素和最后一個(gè)對(duì)調(diào),破壞了堆的性質(zhì),因此要從新向下調(diào)整,建立大頂堆(這里在初始化堆的基礎(chǔ)上,只要將堆頂元素調(diào)到合適的位置即可).調(diào)整完了之后,又將堆頂元素和未序區(qū)間的最后一個(gè)元素對(duì)調(diào),重復(fù)2,3直到堆中剩余一個(gè)元素.

7.2 算法時(shí)間復(fù)雜度

最壞情況下,接近于最好情況下,因此是一種不穩(wěn)定的排序.

穩(wěn)定性

堆排序需要不斷的調(diào)整堆,因此它是一種不穩(wěn)定的排序.

代碼如下

大頂堆:

void AdjustDown(int A[],int k,int len){ A[0] = A[k]; //保存子堆的父節(jié)點(diǎn) for(int i=2*k;i <= len;i*=2){ if(i < len && A[i] < A[i+1]){ //尋找較大的孩子. i++; } if(A[0] > A[i]){ break; }else{ A[k] = A[i]; //孩子上調(diào) k = i; } } A[k] = A[0];}void BuildMaxHeap(int A[],int len){ for(int i =len/2;i>0;i--){ AdjustDown(A,i,len); //向下調(diào)整. }}void HeapSort(int A[],int len){ BuildMaxHeap(A,len); for(int i = len; i>1;i--){ A[0] = A[1]; A[1] = A[i]; A[i] = A[0]; //堆頂和未序區(qū)間尾元素對(duì)調(diào) AdjustDown(A,1,i-1); }}
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
日本aⅴ写真网站免费| 日本亚洲一区二区三区| 91精品国产一区二区| 色久视频在线观看| 国产综合欧美| 在线看片不卡| 国产精品美女在线观看直播| 欧洲精品毛片网站| 亚洲综合图片一区| 欧美成人欧美edvon| 亚洲精品99久久久久中文字幕| 国产高清久久久久| 男人与禽猛交狂配| 91综合久久一区二区| 日韩精品在线中文字幕| 欧美 日韩 国产 成人 在线 91| 国产探花一区| 97超碰人人爽| 最新天堂资源在线| 五月天久久久| 在线理论视频| 国产精选在线观看| 天堂成人在线| 在线观看的av| 精品一区二区三区视频| 青青草原国产免费| 最好看的中文字幕| 国产精品成人一区二区三区电影毛片| 欧美在线短视频| 国产在线观看91| 国产综合网站| 免费成人进口网站| 天天干视频在线| 亚洲图色中文字幕| 午夜激情视频在线观看| 樱桃成人精品视频在线播放| 亚洲欧洲精品一区二区三区| 国产色婷婷亚洲99精品小说| 久热在线视频| 午夜精品在线播放| 国产性色视频| 亚洲一卡二卡三卡四卡无卡网站在线看| 久久久国产精品x99av| 欧美三级电影精品| 亚洲自拍高清视频网站| 欧美顶级大胆免费视频| 97人妻人人揉人人躁人人| 国产精品入口麻豆免费看| 成人亚洲综合| 日韩在线观看一区二区三区| 韩国三级成人在线| 久久av喷吹av高潮av| 北条麻妃在线观看| 国内老熟妇对白xxxxhd| 久久99久久久欧美国产| 好吊的妞视频这里都有| 高清视频一区二区三区四区| 精品乱码一区内射人妻无码| 色哟哟网站入口亚洲精品| 免费成年人高清视频| 天天激情综合| 亚洲精品一区二区在线观看| 国产欧美日韩另类视频免费观看| 免费在线激情视频| 在线免费黄色小视频| 在线观看免费电影| 国产精品日日摸夜夜爽| 国产午夜视频在线观看| 蜜臀在线观看| 久久精品国产精品青草色艺| 国产日韩视频在线播放| 亚洲一区不卡在线| 一二三四社区欧美黄| 欧美色图俺去了| 男人日女人bb视频| 超碰影院在线| 一级黄色大片免费| 人人澡人人澡人人看欧美| 免费大片在线观看| 看成年女人免费午夜视频| 九九大香尹人视频免费| 国产亚洲精品久久久优势| 欧美男男gaytwinkfreevideos| 亚洲欧美日韩国产成人| 欧美另类极品| 久久影院午夜精品| 成人h动漫在线| 色婷婷精品久久二区二区密| 亚洲天堂一区二区三区四区| 毛片在线免费播放| 亚洲成色777777女色窝| 黄色a一级视频| 亚洲乱码国产一区三区| 青青草97国产精品免费观看无弹窗版| 日韩欧美中文在线观看| 欧美国产日韩在线视频| 在线精品观看国产| 女性生殖扒开酷刑vk| 国产成人无码a区在线观看视频| 国产精品视频99| 精品一区二区三区的国产在线观看| 黄色污网站在线观看| 精品国产aⅴ| 亚洲av无码一区二区乱子伦| 伊人精品视频| 91丨porny丨在线| 韩国欧美一区| 91精品国产毛片武则天| 日韩在线视频导航| 成人小说亚洲一区二区三区| 91精品国产色综合久久不卡98口| 精品中文视频在线| 久久久久久久久一区| 岛国片在线免费观看| 亚洲资源视频| www.在线视频.com| 黄色成人在线免费观看| 亚洲摸下面视频| 亚洲一区二区三区爽爽爽爽爽| 国产在线精品自拍| 欧美熟妇精品黑人巨大一二三区| 欧美久久免费观看| 污视频网站在线免费观看| 亚洲av无码乱码国产麻豆| 欧美亚洲成人xxx| 欧美日韩在线视频一区二区| 国产一级aa大片毛片| 潘金莲激情呻吟欲求不满视频| 在线观看国产精品一区| 欧美日韩一区二区三区不卡视频| 久久精品一区二区三区四区| 免费日韩中文字幕| 午夜国产欧美理论在线播放| 国产又粗又爽又黄的视频| 国产一区二区日韩| 欧美日韩精品一本二本三本| 黄色视屏网站在线免费观看| 久久久精品久久久久久96| 亚洲国产精品suv| 色婷婷精品久久二区二区密| 日本最黄一级片免费在线| 国产精品亚洲四区在线观看| 久久国产美女视频| 亚洲久久成人| 免费看片黄色| 欧美日韩电影一区| 国产熟女一区二区丰满| 久久久久久免费网| 亚洲天堂偷拍| 可以在线看的av网站| 日韩电影免费在线观看网站| 99亚洲国产精品| 亚洲欧洲av一区二区三区久久| 欧美在线亚洲一区| 久久久久久久久久久9不雅视频| 亚洲欧洲韩国日本视频| 尤物九九久久国产精品的特点| 欧美精品国产白浆久久久久| 欧美日韩亚洲综合一区二区三区| 黄视频在线免费看| 色综合久久久| 500福利第一精品导航| 宅男噜噜99国产精品观看免费| 国产欧美一区二区三区小说| 一区中文字幕在线观看| 日韩av片在线| 8888在线观看免费www| 人人在线视频| 路边理发店露脸熟妇泻火| 草草视频在线免费观看| 国产精品99精品一区二区三区∴| 男人天堂2020| www.成人精品免费网站青椒| 国产欧美在线观看视频| 伊人再见免费在线观看高清版| 国产微拍精品一区| 欧美日韩精品久久久免费观看| 亚洲欧美激情四射在线日| 99久久精品久久亚洲精品| 7777kkkk成人观看| 东京热无码av男人的天堂| 国产视频一视频二| 少妇性饥渴无码a区免费| 国产视频精品va久久久久久| 91免费国产视频| 久久久久久久久久久久久久av| 一本色道久久综合一区| 欧美综合天天夜夜久久| 日本大片在线播放| 91亚洲精品久久久蜜桃借种| 成av人免费青青久| 亚洲美女视频网站| 菠萝蜜视频网站入口| 亚洲不卡av一区二区三区| 大胆国模一区二区三区| 亚洲香蕉在线视频| 亚洲成人免费av| 校花撩起jk露出白色内裤国产精品| 一本色道久久综合精品婷婷| 国产在线视频你懂| 丁香资源影视免费观看| 粉嫩喷白浆久久| 99久久久成人国产精品| 久久99热精品这里久久精品| 国产喷水theporn| 深夜福利日韩在线看| 国产999精品久久久久久绿帽| 毛片女人与拘交视频| aa亚洲婷婷| 久久美女性网| 久久国产精品99国产精| 日本一卡二卡在线播放| 国产精品白丝av| av中文字幕免费| 在线免费日韩片| 亚洲妇熟xx妇色黄| 国产在线精品一区二区中文| 日韩精品视频中文字幕| 成人欧美一区二区三区在线观看| 日本一区视频在线播放| 日韩少妇内射免费播放18禁裸乳| 国产成人精品实拍在线| 中文字幕av一区二区| 久久精品视频导航| 成人黄色免费视频| 中国视频免男男gay| 91精品又粗又猛又爽| 国产一区免费看| 国产日韩在线观看一区| 成人免费视频一区| 污视频在线免费观看网站| 亚洲天堂2021av| 国产精品99久久久久久宅男| 日韩精品手机在线| 成人免费a级片| 在线精品视频免费播放| 大香伊人中文字幕精品| 神马影院午夜我不卡影院| 日韩欧美一区二区三区不卡视频| 国产十八熟妇av成人一区| 亚洲色图15p| 久久久激情视频| 天天爱天天做天天操| 最新版天堂资源中文官网| 欧美xxxx中国| 欧美成人免费在线视频| 成人自拍视频在线观看| 怡红院成永久免费人全部视频| 亚洲午夜成aⅴ人片| 青青一区二区| 国产女主播在线观看| av电影免费在线看| 国产精品99久| 日本不卡在线观看| av福利在线| 日本一区二区三区在线观看| www.97视频| 欧美国产乱子伦| 午夜激情一区二区| 欧美不卡一区二区三区四区| 日本中文字幕电影在线观看| 日本少妇在线观看| 欧美性大战久久久久久久蜜臀| 最好看更新中文字幕| 亚洲五月六月丁香激情| 亚洲国产精品一区二区三区| 东方欧美亚洲色图在线| 国产尤物久久久| 国模吧一区二区三区| 亚洲综合免费视频| 无码日韩精品一区二区免费| 色爱综合网欧美| 欧美午夜无遮挡| ass精品国模裸体欣赏pics| 午夜肉伦伦影院| 91精品视频在线| 一色屋色费精品视频在线看| 日韩一区二区不卡视频| 要久久爱电视剧全集完整观看| 久久裸体视频| 欧美少妇精品| 影音先锋电影在线观看| 欧美日韩午夜爽爽| 欧美视频免费一区二区三区| 四虎影院免费在线| 国产精品男女猛烈高潮激情| 男人天堂新地址| 91色在线porny| 午夜国产精品影院在线观看| 性欧美大战久久久久久久| 日韩av无码中文字幕| av噜噜在线观看| 性欧美猛交videos| 色视频在线观看福利| 成人久久精品人妻一区二区三区| 国产亚洲色婷婷久久99精品| 亚洲天堂日韩电影| www黄色在线观看| 日韩欧美综合视频| 丰满圆润老女人hd| 91福利区一区二区三区| 男人亚洲天堂| 激情小视频在线| 亚洲欧洲日韩av| 久久亚洲综合国产精品99麻豆精品福利| 视频在线不卡免费观看| 久久久久久久久伊人| 中国china体内裑精亚洲片| 久久久久免费看| 97精品国产| 日本在线视频一区二区| 成人网视频在线观看| 国产精品97在线| 91po在线观看91精品国产性色| 天天影视欧美综合在线观看| 国产日韩专区在线| 免费在线色视频| 中日韩免视频上线全都免费| 91香蕉电影院| 亚洲精品麻豆| 青青草av网站| 日本三级视频在线观看| 亚州综合一区| 男人天堂一区二区| 亚洲1卡2卡3卡4卡乱码精品| 777奇米成人网| 黄色网址中文字幕| 麻豆久久一区二区|