




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第9章排序
1目錄9.1基本概念9.2插入排序9.3交換排序9.5歸并排序退出9.4選擇排序29.1基本概念
排序:是計算機程序設計中的一項重要操作,其功能是指一個數據元素集合或序列重新排列成一個按數據元素某個數據項值有序的序列。
排序碼(關鍵碼):排序依據的數據項。
穩(wěn)定排序:排序前與排序后相同關鍵碼元素間的位置關系,保持一致的排序方法。不穩(wěn)定排序:排序前與排序后相同關鍵碼元素間的相對位置發(fā)生改變的排序方法。排序分為兩類:(1)內排序:指待排序列完全存放在內存中所進行的排序。內排序大致可分為五類:插入排序、交換排序、選擇排序、歸并排序和分配排序。本章主要討論內排序。(2)外排序:指排序過程中還需訪問外存儲器的排序。為了以后討論方便,我們直接將排序碼寫成一個一維數組的形式,并且在沒有聲明的情形下,所有排序都按排序碼的值遞增排列。3例如,n=6,數組R的六個排序碼分別為:17,3,25,14,20,9。它的直接插入排序的執(zhí)行過程如下:直接插入排序舉例5voidD-InsertSort(datatypeR[],intn)/*待排序的n個元素放在數組R中,用直接插入法進行排序*/{for(i=2;i<=n;i++)/*i控制第i-1次插入,最多進行n-1次插入*/if(R[i].key<R[i-1].key)/*小于時,需將R[i]插入有序表*/{R[0]=R[i];/*為統一算法設置監(jiān)視哨*/for(j=i-1;R[0].key<R[j].key;j--)R[j+1]=R[j];/*元素后移*/R[j+1]=R[0];/*將放在R[0]中的第i個元素插入到有序表中*/}}直接插入排序算法6直接插入排序的效率分析
首先從空間來看,它只需要一個元素的輔助空間,用于元素的位置交換。從時間分析,首先外層循環(huán)要進行n-1次插入,每次插入最少比較一次(正序),移動0次;最多比較i次(包括同監(jiān)視哨R[0]的比較),移動i+1次(逆序)(i=2,3,…,n)。因此,直接插入排序的時間復雜度為O(n2)。直接插入算法的元素移動是順序的,該方法是穩(wěn)定的。7
八個元素的關鍵碼分別為:91,67,35,62,29,72,46,57,希爾排序算法的執(zhí)行過程為:希爾排序過程舉例9希爾排序算法voidShellSort(datatypeR[],intd[],intt)
/*按增量序列d[0]、d[1]、d[2]、…、d[t-1]對順序表R[1]、R[2]、…、R[n]作希爾排序,注意d[0]、d[1]、d[2]、…、d[t-1]除1之外不能有公因子,且d[t-1]必須為1*/{for(k=0;k<t;k++) ShellInsert(R,d[k]);
}voidShellInsert(datatypeR[],intdk)/*對順序表R[1]、R[2]、…、R[n]進行一趟插入排序,dk為增量、步長*/{ for(i=dk+1;i<=n;i++) if(R[i].key<R[i-dk].key) {R[0]=R[i];/*存放待插入的記錄*/for(j=i-dk;(j>0)&&(R[0].key<R[j].key);j=j-dk) R[j+dk]=R[j];/*記錄后移*/
R[j+dk]=R[0];/*插入到正確位置*/
}}10希爾排序的效率分析
雖然我們給出的算法是三層循環(huán),最外層循環(huán)為log2n數量級,中間的for循環(huán)是n數量級的,內循環(huán)遠遠低于n數量級,因為當分組較多時,組內元素較少;此循環(huán)次數少;當分組較少時,組內元素增多,但已接近有序,循環(huán)次數并不增加。因此,希爾排序的時間復雜性在O(nlog2n)和O(n2)之間,大致為O(n1.3)。由于希爾排序對每個子序列單獨比較,在比較時進行元素移動,有可能改變相同排序碼元素的原始順序,因此希爾排序是不穩(wěn)定的。110123 45678494938386565979776761313272749'49'冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序130123 45678493849386565979776761313272749'49'冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序140123 45678493849386565979776761313272749'49'冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序150123 45678493849386565979776761313272749'49'冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序170123 45678493849386565769776971313272749'49'冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序180123 45678493849386565769776971313272749'49'冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行。……第n-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序190123 45678493849386565769776139713272749'49'冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序210123 45678493849386565769776132713279749'49'冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序220123 45678493849386565769776132713279749'49'冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序230123 45678384965761327499738496576132749'9738496576132749'97冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行。……第n-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序250123 45678384965761327499738496576132749'9738496576132749'97冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序260123 45678384965761327499738496576132749'9738496513762749'97冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序290123 45678384965761327499738496576132749'9738496513762749'97冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序300123 45678384965761327499738496576132749'9738496513277649'97冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序310123 45678384965761327499738496576132749'9738496513277649'97冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序320123 45678384965761327499738496576132749'97384965132749'7697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序330123 456783849657613274997384965132749'7697384965132749'7697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序340123 456783849657613274997384965132749'7697384965132749'7697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序350123 456783849657613274997384965132749'7697384965132749'7697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行。……第n-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序360123 456783849657613274997384965132749'7697384913652749'7697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行。……第n-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序370123 456783849657613274997384965132749'7697384913652749'7697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行。……第n-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序380123 456783849657613274997384965132749'7697384913276549'7697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序390123 456783849657613274997384965132749'7697384913276549'7697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序400123 456783849657613274997384965132749'76973849132749'657697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序410123 4567838496576132749973849132749'6576973849132749'657697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序420123 4567838496576132749973849132749'6576973849132749'657697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序430123 4567838496576132749973849132749'6576973813492749'657697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序440123 4567838496576132749973849132749'6576973813492749'657697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序450123 4567838496576132749973849132749'6576973813274949'657697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序460123 4567838496576132749973849132749'6576973813274949'657697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行。……第n-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序470123 4567838496576132749973813274949'6576973813274949'657697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行。……第n-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序480123 4567838496576132749973813274949'6576971338274949'657697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序490123 4567838496576132749973813274949'6576971338274949'657697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序500123 4567838496576132749973813274949'6576971327384949'657697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序510123 4567838496576132749973813274949'6576971327384949'657697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序520123 4567838496576132749971327384949'6576971327384949'657697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序530123 4567838496576132749971327384949'6576971327384949'657697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序540123 4567838496576132749971327384949'6576971327384949'657697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序550123 4567838496576132749971327384949'6576971327384949'657697冒泡排序的具體過程
若序列中有n個元素,通常進行n-1趟。第1趟,針對第R[1]至R[n]個元素進行。第2趟,針對第R[1]至R[n-1]個元素進行?!趎-1趟,針對第R[1]至R[2]個元素進行。每一趟進行的過程:從第一個元素開始,比較兩個相鄰的元素。若相鄰的元素的相對位置不正確,則進行交換;否則繼續(xù)比較下面兩個相鄰的元素。
結束條件:在任何一趟進行過程中,未出現交換。
如:將序列49、38、65、97、76、13、27、49用起泡排序的方法進行排序56冒泡排序算法的實現voidBubble-sort(datatypeR[],intn){inti,j,swap;/*當swap為0則停止排序*/for(i=1;i<n;i++)/*i表示趟數,最多n-1趟*/{swap=0;/*開始時元素未交換*/for(j=1;j<=n-i;j++)if(R[j].key>R[j+1].key)/*發(fā)生逆序*/{R[0]=R[j];R[j]=R[j+1];R[j+1]=R[0];swap=1;}/*交換,并標記發(fā)生了交換*/if(s)break;}}57冒泡排序的效率分析
從冒泡排序的算法可以看出,若待排序的元素為正序,則只需進行一趟排序,比較次數為(n-1)次,移動元素次數為0;若待排序的元素為逆序,則需進行n-1趟排序,比較次數為(n2-n)/2,移動次數為3(n2-n)/2,因此冒泡排序算法的時間復雜度為O(n2)。由于其中的元素移動較多,所以屬于內排序中速度較慢的一種。因為冒泡排序算法只進行元素間的順序移動,所以是一個穩(wěn)定的算法。589.3.2快速排序(分區(qū)交換排序)快速排序(QuickSorting)是迄今為止所有內排序算法中速度最快的一種。它的基本思想是:任取待排序序列中的某個元素作為標準(也稱為支點、界點,一般取第一個元素),通過一次劃分,將待排元素分為左右兩個子序列,左子序列元素的排序碼均小于基準元素的排序碼,右子序列的排序碼則大于或等于基準元素的排序碼,然后分別對兩個子序列繼續(xù)進行劃分,直至每一個序列只有一個元素為止。最后得到的序列便是有序序列。第1趟[273813]49[76976549′]
第2趟[[13]27[38]]49[[49′65]76[97]]
第3趟[[13]27[38]]49[[49′[65]]76[97]]
最后結果1327384949′657697假設:[4938659776132749′]59一次劃分的具體過程
1.low指向待劃分區(qū)域首元素,high指向待劃分區(qū)域尾元素;2.R[0]=R[low](為了減少數據的移動,將作為標準的元素暫存到R[0]中,最后再放入最終位置);3.
high從后往前移動直到R[high].key<R[0].key;4.
R[low]=R[high],low++;5.
low從前往后移動直到R[low].key>=R[0].key;6.
R[high]=R[low],high--;7.
goto3;8.
直到low==high時,R[low]=R[0](即將作為標準的元素放到其最終位置)。概括地說,一次劃分就是從表的兩端交替地向中間進行掃描,將小的放到左邊,大的放到右邊,作為標準的元素放到中間。60例初始關鍵字:4938659776132750ijxji完成一趟排序:(273813)49(76976550)分別進行快速排序:(13)27(38)49(5065)76(97)快速排序結束:13273849
506576972727ijijij6565ji1313ij9797ij快速排序的排序過程610123 456784938659776132749'
highlow38659776132749'
49一次劃分的具體過程示例如:將序列49、38、65、97、76、13、27、49‘一次劃分的過程為:一次劃分的具體過程為:1.
low指向待劃分區(qū)域首元素,high指向待劃分區(qū)域尾元素;620123 456784938386565979776761313272749'
49'
highlow49界點一次劃分的具體過程示例如:將序列49、38、65、97、76、13、27、49‘一次劃分的過程為:一次劃分的具體過程為:1.low指向待劃分區(qū)域首元素,high指向待劃分區(qū)域尾元素;2.R[0]=R[low](為了減少數據的移動,將作為標準的元素暫存到R[0]中,最后再放入最終位置);630123 456784938386565979776761313272749'
49'
highlow49界點一次劃分的具體過程示例如:將序列49、38、65、97、76、13、27、49‘一次劃分的過程為:一次劃分的具體過程為:1.low指向待劃分區(qū)域首元素,high指向待劃分區(qū)域尾元素;2.R[0]=R[low](為了減少數據的移動,將作為標準的元素暫存到R[0]中,最后再放入最終位置);3.
high從后往前移動直到R[high].key<R[0].key;640123 456784938386565979776761313272749'
49'
highlow49界點一次劃分的具體過程示例如:將序列49、38、65、97、76、13、27、49‘一次劃分的過程為:一次劃分的具體過程為:
1.low指向待劃分區(qū)域首元素,high指向待劃分區(qū)域尾元素;2.R[0]=R[low](為了減少數據的移動,將作為標準的元素暫存到R[0]中,最后再放入最終位置);3.
high從后往前移動直到R[high].key<R[0].key;4.R[low]=R[high],low++;
650123 456784938386565979776761313272749'
49'
highlow49界點一次劃分的具體過程示例如:將序列49、38、65、97、76、13、27、49‘一次劃分的過程為:一次劃分的具體過程為:1.low指向待劃分區(qū)域首元素,high指向待劃分區(qū)域尾元素;2.R[0]=R[low](為了減少數據的移動,將作為標準的元素暫存到R[0]中,最后再放入最終位置);3.
high從后往前移動直到R[high].key<R[0].key;4.R[low]=R[high],low++;
5.
low從前往后移動直到R[low].key>=R[0].key;660123 456784938386565979776761313272749'
49'
highlow49界點一次劃分的具體過程示例如:將序列49、38、65、97、76、13、27、49‘一次劃分的過程為:一次劃分的具體過程為:
1.low指向待劃分區(qū)域首元素,high指向待劃分區(qū)域尾元素;2.R[0]=R[low](為了減少數據的移動,將作為標準的元素暫存到R[0]中,最后再放入最終位置);3.
high從后往前移動直到R[high].key<R[0].key;4.R[low]=R[high],low++;
5.
low從前往后移動直到R[low].key>=R[0].key;6.R[high]=R[low],high--;670123 456784938386565979776761313272749'
49'
highlow49界點一次劃分的具體過程示例如:將序列49、38、65、97、76、13、27、49‘一次劃分的過程為:一次劃分的具體過程為:1.low指向待劃分區(qū)域首元素,high指向待劃分區(qū)域尾元素;2.R[0]=R[low](為了減少數據的移動,將作為標準的元素暫存到R[0]中,最后再放入最終位置);3.
high從后往前移動直到R[high].key<R[0].key;4.R[low]=R[high],low++;
5.
low從前往后移動直到R[low].key>=R[0].key;6.R[high]=R[low],high--;7.
goto3;680123 456784938386565979776761313272749'
49'
highlow49界點一次劃分的具體過程示例如:將序列49、38、65、97、76、13、27、49‘一次劃分的過程為:一次劃分的具體過程為:1.low指向待劃分區(qū)域首元素,high指向待劃分區(qū)域尾元素;2.R[0]=R[low](為了減少數據的移動,將作為標準的元素暫存到R[0]中,最后再放入最終位置);3.
high從后往前移動直到R[high].key<R[0].key;4.R[low]=R[high],low++;
5.
low從前往后移動直到R[low].key>=R[0].key;6.R[high]=R[low],high--;7.
goto3;690123 456784938386565979776761313272749'
49'
highlow49界點一次劃分的具體過程示例如:將序列49、38、65、97、76、13、27、49‘一次劃分的過程為:一次劃分的具體過程為:1.low指向待劃分區(qū)域首元素,high指向待劃分區(qū)域尾元素;2.R[0]=R[low](為了減少數據的移動,將作為標準的元素暫存到R[0]中,最后再放入最終位置);3.
high從后往前移動直到R[high].key<R[0].key;4.R[low]=R[high],low++;
5.
low從前往后移動直到R[low].key>=R[0].key;6.R[high]=R[low],high--;7.
goto3;700123 45678493838656597977676131327
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 體育館翻新包清工合同樣本
- 胸部創(chuàng)傷急救規(guī)范
- 公寓精裝修銷售合同
- 2025年度辦公場所安全應急預案協議書
- 兒童營養(yǎng)水果配送服務協議
- 肱骨外髁骨折護理查房
- 2024浙江經貿職業(yè)技術學院(中職)工作人員招聘考試及答案
- 2024沈陽市城市建設管理學校工作人員招聘考試及答案
- 2024濟南二機床高級技工學校工作人員招聘考試及答案
- 2024濱州航空中等職業(yè)學校工作人員招聘考試及答案
- 水培吊蘭的養(yǎng)殖方法要領
- 動物的遷徙行為與地球生態(tài)系統
- 總成修理工安全操作規(guī)程
- 【小學心理健康教育分析國內外文獻綜述4100字】
- 校園金話筒大賽(臨沂賽區(qū))策劃書
- 正確使用文丘里面罩
- 破碎錘施工方案
- 2023年10月自考00161財務報表分析(一)試題及答案含評分標準
- 讀書分享讀書交流會《朝聞道》劉慈欣科幻小說讀書分享
- 大學物理第8章-機械振動
- 《線面平行的判定》課件
評論
0/150
提交評論