



下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
總結(jié)一些C語(yǔ)言中常見的排序算法,都已經(jīng)實(shí)現(xiàn)。1、冒泡排序算法思想簡(jiǎn)單描述:在要排序的一組數(shù)中,對(duì)當(dāng)前還未排好序的范圍內(nèi)的全部數(shù),自上而下對(duì)相鄰的兩個(gè)數(shù)依次進(jìn)行比較和調(diào)整,讓較大的數(shù)往下沉,較小的往上冒。即:每當(dāng)兩相鄰的數(shù)比較后發(fā)現(xiàn)它們的排序與排序要求相反時(shí),就將它們互換。冒泡排序是穩(wěn)定的。算法時(shí)間復(fù)雜度O(n2)--[n的平方]main(){inta[10],i,j,k;printf(〃Thisisamaopaosort\n〃);printf(〃Pleaseinput10numbersforsort:");for(i=0;i<10;i++)scanf(〃%d〃,&a[i]);for(i=0;i<9;i++)for(j=0;j<10-i;j++)if(a[j]>a[j+1]){k=a[j];a[j]=a[j+1];a[j+1]=k;}printf("Thecorretsortofthosenumbersis:");for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");}2、選擇排序算法思想簡(jiǎn)單描述:在要排序的一組數(shù)中,選出最小的一個(gè)數(shù)與第一個(gè)位置的數(shù)交換;然后在剩下的數(shù)當(dāng)中再找最小的與第二個(gè)位置的數(shù)交換,如此循環(huán)到倒數(shù)第二個(gè)數(shù)和最后一個(gè)數(shù)比較為止。選擇排序是不穩(wěn)定的。算法復(fù)雜度O(n2)--[n的平方]main(){intt,k,i,j,a[10];printf("Thisisaselectsort\n");printf("Pleaseinputsomenumberthatyouwanttosort:");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<9;i++)(k=i;for(j=i+1;j<10;j++)if(a[k]>a[j])k=j;t=a[i];a[i]=a[k];a[k]=t;}printf(〃Thecorrectsortofthosenumberis:");for(i=0;i<10;i++)printf(〃%d",a[i]);printf("\n");}3、插入排序算法思想簡(jiǎn)單描述:在要排序的一組數(shù)中,假設(shè)前面(n-1)[n>=2]個(gè)數(shù)已經(jīng)是排好順序的,現(xiàn)在要把第n個(gè)數(shù)插到前面的有序數(shù)中,使得這n個(gè)數(shù)也是排好順序的。如此反復(fù)循環(huán),直到全部排好順序。直接插入排序是穩(wěn)定的。算法時(shí)間復(fù)雜度O(n2)--[n的平方]main()(inta[10],j,i,m;printf("thisisainsertsort\n");printf("Pleaseinputthe10numberyouwanttosort:");for(i=0;i<10;i++)scanf(〃%d〃,&a[i]);for(j=1;j<10;j++)(m=a[j];for(i=j-1;i>=0;i--)(if(a[i]<m)break;elsea[i+1]=a[i];}a[i+1]=m;}printf("Thecorrectorderofthosenumbersis:");for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");}4、快速排序算法思想簡(jiǎn)單描述:快速排序是對(duì)冒泡排序的一種本質(zhì)改進(jìn)。它的基本思想是通過(guò)一趟掃描后,使得排序序列的長(zhǎng)度能大幅度地減少。在冒泡排序中,一次掃描只能確保最大數(shù)值的數(shù)移到正確位置,而待排序序列的長(zhǎng)度可能只減少1??焖倥判蛲ㄟ^(guò)一趟掃描,就能確保以某個(gè)數(shù)為基準(zhǔn)點(diǎn)的左邊各數(shù)都比它小,右邊各數(shù)都比它大。然后又用同樣的方法處理它左右兩邊的數(shù),直到基準(zhǔn)點(diǎn)的左右只有一個(gè)元素為止。顯然快速排序可以用遞歸實(shí)現(xiàn),當(dāng)然也可以用棧化解遞歸實(shí)現(xiàn)。快速排序是不穩(wěn)定的。最理想情況算法時(shí)間復(fù)雜度O(nlog2n),最壞O(n2)quick(intfirst,intend,intL[]){intleft二first,right二end,key;key=L[first];while(left<right){while((left<right)&&(L[right]>=key))right--;if(left<right)L[left++]=L[right];while((left<right)&&(L[left]<=key))left++;if(left<right)L[right--]=L[left];}L[left]=key;returnleft;}quick_sort(intL[],intfirst,intend){intsplit;if(end>first){split二quick(first,end,L);quick_sort(L,first,split-1);quick_sort(L,split+1,end);}}main(){inta[10],i;printf("Thisisaquicksort\n〃);printf("Pleaseinput10numbersforsort:");for(i=0;i<10;i++)scanf(〃%d〃,&a[i]);quick_sort(a,0,9);printf("Thecorrectsortofthosenumbersis:");for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");}5、希爾排序算法思想簡(jiǎn)單描述:D.L.shell于1959年在以他名字命名的排序算法中實(shí)現(xiàn)了這一思想。算法先將要排序的一組數(shù)按某個(gè)增量d分成若干組,每組中記錄的下標(biāo)相差d.對(duì)每組中全部元素進(jìn)行排序,然后再用一個(gè)較小的增量對(duì)它進(jìn)行,在每組中再進(jìn)行排序。當(dāng)增量減到1時(shí),整個(gè)要排序的數(shù)被分成一組,排序完成。下面的函數(shù)是一個(gè)希爾排序算法的一個(gè)實(shí)現(xiàn),初次取序列的一半為增量,以后每次減半,直到增量為1。希爾排序是不穩(wěn)定的。voidshell_sort(int*x,intn)(inth,j,k,t;for(h=n/2;h>0;h=h/2)/*控制增量*/(for(j=h;j<n;j++)/*這個(gè)實(shí)際上就是上面的直接插入排序*/(t=*(x+j);for(k=j-h;(k>=0&&t<*(x+k));k-=h)(*(x+k+h)=*(x+k);}*(x+k+h)=t;}}}6、堆排序算法思想簡(jiǎn)單描述:堆排序是一種樹形選擇排序,是對(duì)直接選擇排序的有效改進(jìn)。堆的定義如下:具有n個(gè)元素的序列(h1,h2,...,hn),當(dāng)且僅當(dāng)滿足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1)(i=1,2,...,n/2)時(shí)稱之為堆。在這里只討論滿足前者條件的堆。由堆的定義可以看出,堆頂元素(即第一個(gè)元素)必為最大項(xiàng)。完全二叉樹可以很直觀地表示堆的結(jié)構(gòu)。堆頂為根,其它為左子樹、右子樹。初始時(shí)把要排序的數(shù)的序列看作是一棵順序存儲(chǔ)的二叉樹,調(diào)整它們的存儲(chǔ)順序,使之成為一個(gè)堆,這時(shí)堆的根節(jié)點(diǎn)的數(shù)最大。然后將根節(jié)點(diǎn)與堆的最后一個(gè)節(jié)點(diǎn)交換。然后對(duì)前面(n-1)個(gè)數(shù)重新調(diào)整使之成為堆。依此類推,直到只有兩個(gè)節(jié)點(diǎn)的堆,并對(duì)它們作交換,最后得到有n個(gè)節(jié)點(diǎn)的有序序列。從算法描述來(lái)看,堆排序需要兩個(gè)過(guò)程,一是建立堆,二是堆頂與堆的最后一個(gè)元素交換位置。所以堆排序有兩個(gè)函數(shù)組成。一是建堆的滲透函數(shù),二是反復(fù)調(diào)用滲透函數(shù)實(shí)現(xiàn)排序的函數(shù)。有最大堆和最少堆之分堆排序是不穩(wěn)定的。算法時(shí)間復(fù)雜度O(nlog2n)。功能:滲透建堆voidsift(int*x,intn,ints)(intt,k,j;t=*(x+s);/*暫存開始元素*/k=s;/*開始元素下標(biāo)*/j=2*k+1;/*右子樹元素下標(biāo)*/while(j<n)(if(j<n-1&&*(x+j)<*(x+j+1))/判斷是否滿足堆的條件:滿足就繼續(xù)下一輪比較,否則調(diào)整。*/(j++;}if(t<*(x+j))/*調(diào)整*/(*(x+k)=*(x+j);k=j;/*調(diào)整后,開始元素也隨之調(diào)整*/j=2*k+1;}else/*沒有需要調(diào)整了,已經(jīng)是個(gè)堆了,退出循環(huán)。*/(break;}}*(x+k)=t;/*開始元素放到它正確位置*/}
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6-Piperazin-1-yl-isoquinoline-hydrochloride-6-1-Piperazinyl-isoquinoline-hydrochloride-生命科學(xué)試劑-MCE
- 2025年飼用生物活性制劑項(xiàng)目合作計(jì)劃書
- 2025年高溫蠕變?cè)囼?yàn)機(jī)合作協(xié)議書
- 語(yǔ)音識(shí)別技術(shù)合作開發(fā)合同(2篇)
- 2025年500KV760KV超高壓變壓器匝和超高壓電纜絕緣紙項(xiàng)目發(fā)展計(jì)劃
- 藥店與醫(yī)藥電商平臺(tái)2025年度合作協(xié)議簡(jiǎn)篇
- 二零二五年度收養(yǎng)協(xié)議書匯編:跨國(guó)收養(yǎng)的法律風(fēng)險(xiǎn)防控與解決方案
- 二零二五年度農(nóng)村宅基地租賃及配套設(shè)施建設(shè)合作協(xié)議
- 二零二五年度幼兒園餐飲服務(wù)及食品安全管理轉(zhuǎn)讓合同
- 二零二五年度土地面積誤差調(diào)整補(bǔ)充協(xié)議
- 2024湖北省金口電排站管理處招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 油井供水合同范例
- 2025年人教部編版語(yǔ)文五年級(jí)下冊(cè)教學(xué)計(jì)劃(含進(jìn)度表)
- 全國(guó)計(jì)算機(jī)等級(jí)考試一級(jí)試題及答案(5套)
- 銀河證券-科創(chuàng)板認(rèn)知測(cè)評(píng)題目及答案
- 產(chǎn)品方案設(shè)計(jì)模板
- 部隊(duì)通訊員培訓(xùn)
- 物業(yè)公司水浸、水管爆裂事故應(yīng)急處置預(yù)案
- 第四章第三節(jié)幼兒的親子關(guān)系(課件)-《幼兒心理學(xué)》(人教版第二版)
- 國(guó)企投資管理制度
- 部編版三年級(jí)下冊(cè)語(yǔ)文作業(yè)本參考答案
評(píng)論
0/150
提交評(píng)論