日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 學院 > 開發設計 > 正文

常見排序算法總結

2019-11-10 20:22:10
字體:
來源:轉載
供稿:網友

前言

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

這個算法的思想是什么?這個算法的穩定性怎樣?時間復雜度是多少?在什么情況下,算法出現最好情況or最壞情況?這個算法的具體實現?

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

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

1.1算法思想:

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

1.2 時間復雜度

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

1.3 穩定性

排序過程中只交換兩個元素的位置,因此,當兩個數相等時,是沒有必要交換兩個數的位置的,所以,它們相對位置并沒有改變,冒泡算法是穩定的。

1.4代碼實現

void BubbleSort(int a[],int n) //升序時,每次把最大的放到n-i-1個元素的位置上,每次遍歷的元素個數-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]) //比較找本趟最大關鍵字. { k=a[j]; //a[j]和a[j+1]交換 a[j]=a[j+1]; a[j+1]=k; } } }}

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

2.1算法思想

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

2.2時間復雜度

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

2.3穩定性

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

2.4代碼實現

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++){ //升序時,每次把最小的放在最前面,每次遍歷的元素-1;從前面加 if(a[k] > a[j]) { k=j; } } if(k!=i) { temp = a[i]; a[i]=a[k]; a[j]=temp; } }}

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

3.1算法思想

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

3.2算法時間復雜度

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

3.3穩定性

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

代碼實現

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

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

4.1算法思想

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

4.2算法復雜度

最好的情況下:因為每次都將序列化分為兩部分(一般二分復雜度都和logN相關),故為O(N(*logN) 最壞的情況下:基本有序時m退化為冒泡排序,幾乎要比較N*N此,故為O(N*N)

4.3 穩定性

由于每次都需要和中軸元素交換,因此原來的順序就可能被打亂,如5 3 3 4 3 8 9 10 11 會將3的順序打亂,所以說,快速排序是不穩定的。 

4.4 代碼實現

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算法思想:將待排序的集合一分為二,直到排序集合就剩下一個元素為止,然后不斷合并兩個排好序的數組.(先分割后合并)

5.2算法時間復雜度

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

5.3 穩定性

歸并排序最大的特色就是它是一種穩定的排序算法,歸并過程中是不會改變元素的相對位置的。 缺點:它需要O(n)的額外空間,但是很適合于多鏈表排序

5.4 代碼實現

int merge(int a[],int low,int mid,int high){ //對排好序的兩個分組進行合并 int i=low,j=mid+1,p=0; int *temp=(int *)malloc(sizeof(int)); //開辟臨時數組存合并后的元素。 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) //說明此時只剩下一個元素,不用再分。 { mergeSort(a,low,mid); //對左邊的元素依然進行分, mergeSort(a,mid+1,high); merge(a,low,mid,high); }}

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

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

6.1算法思想

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

6.2 時間復雜度

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

6.3 穩定性

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

6.4 代碼實現

//完全按照定義實現.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; } } } }}//簡化版的希爾排序,相當于是所有的分組同時比較,比如說當gap 為2時,第一種方法是1,3,5,7,9插入排序完,在進行2,4,6,8,10進行排序,而當前的方法是1,3排序完,接著排2,4然后又排,1,3,5,然后又是2,4,6,以此類推,所有的組同時進行。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算法解析

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

7.2 算法時間復雜度

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

穩定性

堆排序需要不斷的調整堆,因此它是一種不穩定的排序.

代碼如下

大頂堆:

void AdjustDown(int A[],int k,int len){ A[0] = A[k]; //保存子堆的父節點 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]; //孩子上調 k = i; } } A[k] = A[0];}void BuildMaxHeap(int A[],int len){ for(int i =len/2;i>0;i--){ AdjustDown(A,i,len); //向下調整. }}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]; //堆頂和未序區間尾元素對調 AdjustDown(A,1,i-1); }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
日韩三级精品| av中文网站| 欧美日韩在线精品一区二区三区激情综| 日韩久久精品网| 国产99对白在线播放| 精品久久香蕉国产线看观看gif| 91www成人久久| 91精品国产高清久久久久久| 国产高清精品在线| 日韩不卡一二三区| 99日韩精品| 欧美一级久久久久久久久大| 中文字幕第一页在线| 欧美日韩精品三区| 一区二区在线观看不卡| 亚洲欧洲日产国码av系列天堂| 国产成人精品免费久久久久| 欧美日韩在线三级| 日韩欧美综合视频| 亚洲成年人在线播放| 日韩亚洲不卡在线| 欧美日韩国产综合久久| 91精品国产综合久久蜜臀| 美女在线视频一区| av高清一区| 欧美日韩国产系列| 亚洲a中文字幕| 亚洲大片精品永久免费| 亚洲一区中文| 亚洲免费观看在线观看| 国产精品一区二区三区免费观看| 欧美日韩精品免费| 亚洲免费精品| 欧美日韩高清不卡| 欧美国产中文| 欧美国产日韩在线播放| 在线视频观看日韩| 欧美日韩三级在线观看| 免费看日韩精品| 欧美在线视频二区| 亚洲欧美视频一区二区三区| 欧美日韩国产大片| 一级片免费网站| 成年人看的羞羞网站| 中文在线а√在线8| 欧美成人vr18sexvr| 久久精品人妻一区二区三区| 亚洲精华国产欧美| 黄色在线播放网站| 久久精品国产视频| 亚洲一区精品电影| 国产婷婷色一区二区三区| 一区二区在线高清视频| 日韩在线欧美| www.av中文字幕| 中文欧美日韩| 国产福利一区在线观看| 中文字幕欧美人妻精品一区蜜臀| 黄色片免费在线| 日本va欧美va精品发布| 国产欧美日韩最新| 一区二区三区四区五区视频在线观看 | 中文字幕日韩在线视频| 一级片免费网站| 一区二区三区在线|网站| 久久久久久久久99精品| 免费在线观看国产黄| 91精品国产高清| 麻豆一区二区99久久久久| 国产福利第一页| 蜜桃久久久久| 国产在线观看a| 日韩亚洲一区中文字幕| 天天综合天天综合| 粉嫩喷白浆久久| 青青久在线视频免费观看| 国产欧美日韩不卡免费| 亚洲国产福利| a视频在线播放| 欧美日韩视频免费| 日韩免费精品视频| 国产无遮挡在线视频免费观看| 欧美日韩综合视频网址| 日韩欧美国产综合| 日韩中文首页| 在线国产三级| 91久久精品视频| 日韩欧美在线看| 一区二区国产在线| 国产亚洲欧美中文| 日韩欧美中文字幕在线播放| 蜜桃久久av| 日韩欧美国产成人一区二区| 亚洲欧美小说国产图片| 不卡在线视频| 中文在线а√在线8| 国产视频二区| 伊人www22综合色| 欧美亚洲综合视频| 国产欧美日韩不卡| 不卡专区在线| 国产乱码午夜在线视频| 亚洲第一视频网站| 国产一级在线播放| 中文字幕第一页在线| 成人xxxx| 在线欧美日韩国产| 欧美日韩视频免费| 精品国产乱码久久久久久牛牛| 亚洲欧洲日韩在线| 欧美不卡视频一区| 欧美不卡视频一区发布| 久草视频观看| 亚洲精品中文字幕乱码三区| 欧美在线视频一区二区| 999视频精品| 欧美日韩在线中文字幕| 亚洲欧美久久久| 国产福利在线导航| 中文字幕欧美日韩va免费视频| 国产99对白在线播放| 91精品国产经典在线观看| 日韩在线中文视频| 伊人网站在线| 亚洲乱码中文字幕| 不卡视频一区二区三区| 日韩精品a在线观看91| 日韩精品午夜| 精品久久久精品| 国产伦精品免费视频| 国产成人精品综合久久久| 玖玖在线免费视频| 中文字幕在线观看网址| 精品久久久视频| 国产偷国产偷亚洲清高网站| 91精品婷婷国产综合久久竹菊| 亚洲一卡二卡在线观看| 欧美日韩在线不卡| 国产精品一区二三区| 日韩精品一页| 亚洲美女视频一区| 在线中文字幕视频| 麻豆一区二区99久久久久| 日韩亚洲不卡在线| 欧美日韩在线不卡视频| 欧美日韩综合色| 91麻豆视频网站| 一区二区三区精品99久久| 亚洲一级在线| 日韩欧美中文字幕在线播放| 久久91精品国产91久久小草| 精品亚洲成a人片在线观看| 中文字幕狠狠干| 在线一区av| 99视频一区| 91国内精品在线视频| 日韩福利视频导航| 日韩欧美在线网址| 亚洲专区一二三| 日韩在线视频中文字幕| 久久精品久久精品国产大片| 日韩精品中文字幕第1页| 日本一级一片免费视频| av午夜在线| 拍真实国产伦偷精品| 中文字幕成人乱码在线电影| 国产羞羞视频在线播放| 日韩精品中文字幕第1页| av免费网站在线观看| 97最新国自产拍视频在线完整在线看| 国产中文在线| 亚洲va中文字幕| 日韩久久不卡| 欧美日韩午夜精品| 人成在线免费视频| 亚洲欧美韩国综合色| 国产高清不卡av| 日韩国产成人精品| 欧美 中文字幕| 国产偷国产偷亚洲清高网站| 国产一级粉嫩xxxx| 国产绿帽一区二区三区| 亚洲第一中文字幕| 999精品色在线播放| 欧美日韩亚洲一| 精品福利在线观看| 精品日韩99亚洲| 亚洲高清中文字幕| 精品国产网站在线观看| 在线日韩精品视频| 中文av字幕一区| 日韩在线视频免费观看| 国产欧美日韩91| 国产三级视频网站| www.狠狠| 欧美日韩久久久| 久99久视频| 91精品国产经典在线观看| 国产视频一区二| 免费视频一区三区| 欧美日韩精品在线视频| 自拍日韩亚洲一区在线| a天堂在线资源| 日韩欧美一级精品久久| 日韩.欧美.亚洲| 在线一区av| 亚洲一区中文字幕在线观看| 在线中文免费视频| 国产在线观看黄色| 精品三级在线| 国产 日韩 欧美 综合| 91精品观看| 一区二区三区免费看视频| 黄色一区二区视频| 亚洲九九精品| 日本黄色一区二区| 亚洲欧洲日韩在线| 久久久久久自在自线| 欧美日韩国产免费| 中文字幕在线观看精品| 中文字幕在线官网| 一区二区三区在线播| 一区二区三区在线|网站| 久久精品一级爱片| 成人久久在线| 自拍日韩亚洲一区在线| 日韩欧美一级二级三级久久久| 日韩在线中文视频| 中文字幕欧美日韩| 国产视频一区三区| 精品免费久久久| 欧美日韩国产片| 国产欧美日韩综合| 日韩免费视频一区| 亚洲女人天堂色在线7777| 粉嫩喷白浆久久| 久久久水蜜桃| 欧美日韩精品是欧美日韩精品| 国产超级va在线视频| 国产欧美日韩视频| 99精品视频国产| 国产日韩精品在线观看| 国产欧美 在线欧美| 91精品视频免费在线观看| 欧美日韩成人一区| 91精品国产91久久| 欧美在线视频第一页| 国产不卡在线| 久久精品国产成人一区二区三区| 日本亚洲欧美天堂免费| 日韩欧美中文免费| 91精品在线观看视频| 欧美日韩国产免费| 日韩一级在线视频 | 日韩精品视频中文字幕| 99pao成人国产永久免费视频| 欧美日韩一级视频| 国产欧美日韩精品在线| 91精品无人成人www| a√免费观看在线网址www| 日韩精品一页| 日韩欧美99| 国产三级做爰在线观看| 久久精品欧美日韩精品| aaa免费看大片| 91麻豆精品国产91久久久使用方法 | 在线精品日韩| 伊人永久在线| 日本亚洲欧美三级| 亚洲制服一区| 中文字幕五月天| 蜜桃精品视频| 精品全国在线一区二区| 亚洲欧美久久234| 亚洲大胆人体av| 国产91久久久久蜜臀青青天草二 | 国产在线欧美| 中文字幕亚洲乱码| 欧美日韩综合视频| 日韩欧美在线字幕| 97国产视频| 日韩 欧美 亚洲| 欧美日韩国产综合久久| 欧美99久久| 91www成人久久| 麻豆精品视频入口| 午夜国产视频 | 91精品在线看V| 日韩三级精品电影久久久| 欧美日韩精品免费在线观看视频| 一区二区91| 精品一区二区三区中文字幕在线| wwwav在线播放| 欧美 日韩 国产 在线| 国产一级在线播放| 樱花草www在线| av一区在线观看| 亚洲欧美小说国产图片| 亚洲女人天堂a在线播放| 亚洲一二三不卡| 国产在线黄色| 婷婷综合福利| 亚州福利视频| 精品网站999www| 91精品综合久久| 国产69精品久久久久孕妇国产69久久 | 中文字幕欧美国内| 国产欧美日韩不卡| 亚洲中文字幕一区| 中文字幕第一页在线播放| 二区中文字幕| 青青国产91久久久久久| 中文字幕一区不卡| 国产日韩av高清| 99久久婷婷| 亚洲电影中文字幕在线观看| 国产一区高清视频| 欧美二三四区| 91精品婷婷国产综合久久竹菊| 色猫猫国产区一区二在线视频| 亚洲成a人片在线www| 精品九九久久| 日本亚洲欧美三级| 欧美三级网址| 91精品视频国产| 久久久另类综合| 二区三区中文字幕| 亚洲va中文字幕| 日韩中文字幕91| 一级国产黄色片| 国产成人日日夜夜| 一区二区精品区| 亚洲一区精品电影| 中文字幕久精品免费视频| av午夜在线| 国产手机精品视频| 精品视频资源站| 日韩精品在线免费观看| 国产黄色网页| 欧美国产一级片| 欧美久久久久久蜜桃| 精品在线网站观看| 99热最新网址| 最近中文字幕在线中文高清版| 国产日韩中文字幕在线| 午夜伊人狠狠久久| 精品视频—区二区三区免费| 在线一区二区三区精品| 男人的天堂网av| 国产视频aaa| 日韩精品手机在线观看| 日韩在线视频在线观看| 国产午夜精品久久| 亚洲一区在线视频观看| 欧美日韩在线播放一区| 正在播放日韩精品| 中文字幕日韩亚洲| 精品三区视频| 国产福利精品导航| 日韩三级在线播放| 国产三级视频网站| 精品一二三区视频| 日韩久久精品成人| 一本一道综合狠狠老| 精品视频在线视频| 国产福利第一页| va中文字幕| 亚洲福利一区| 国产v日产∨综合v精品视频| 精品久久人人做人人爽| 欧美日韩国产一中文字不卡| 91精品久久久久久蜜臀| 精品激情国产视频| 中文字幕伊人| 国产成人精品免费久久久久| 久久香蕉av| 欧美日韩激情一区二区三区| 国产一区免费视频| 日韩欧美中文在线| 国产在线观看黄色| 在线视频观看日韩| 热久久精品国产| 日韩精品中文字幕第1页| 中文字幕亚洲字幕| av中文天堂在线| 欧美高清一级片在线| 欧美一级久久久久久久久大| 欧美日韩成人综合| 中文字幕日韩在线观看| 欧美1234区| 欧美亚洲视频在线看网址| 高清1区2区| 免费网站看黄yyy222| 日韩一二三四区| 色综合婷婷久久| 中文字幕一区二区三区精品| 91精品国产色综合久久久蜜香臀| 国产中文伊人| 中文天堂资源在线| 日韩视频在线免费播放|