版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
A)需求分析:
1、冒泡排序
在要排序的一組數(shù)中,對(duì)當(dāng)前還未排好序的范圍內(nèi)的全部數(shù),自上
而下對(duì)相鄰的兩個(gè)數(shù)挨次進(jìn)行比較和調(diào)整,讓較大的數(shù)往下沉,較
小的往上冒。
冒泡排序是穩(wěn)定的。算法時(shí)間復(fù)雜度0(n2)—[n的平方]
2、選擇排序
在要排序的一組數(shù)中,選出最小的一個(gè)數(shù)與第一個(gè)位置的數(shù)交換;
然后在剩下的數(shù)之中再找最小的與第二個(gè)位置的數(shù)交換,如此循環(huán)
到倒數(shù)第二個(gè)數(shù)和最后一個(gè)數(shù)比較為止。
選擇排序是不穩(wěn)定的。算法復(fù)雜度0(n2)—[n的平方]
3、插入排序
直接插入排序是穩(wěn)定的。算法時(shí)間復(fù)雜度0(n2)—[n的平方]
4、折半插入排序
折半插入排序是對(duì)插入排序的改進(jìn),主要通過(guò)二分查找,獲得插入的位置
折半插入是一種穩(wěn)定的排序排序時(shí)間復(fù)雜度0(n~2)附加空間0(1)
5、快速排序
快速排序是不穩(wěn)定的。最理想情況算法時(shí)間復(fù)雜度0(nlog2n),最壞0(n2)
6、希爾排序
算法先將要排序的一組數(shù)按某個(gè)增量d分成若干組,每組中
記錄的下標(biāo)相差d.對(duì)每組中全部元素進(jìn)行排序,然后再用一個(gè)較小的增量
對(duì)它進(jìn)行,在每組中再進(jìn)行排序。當(dāng)增量減到1時(shí),整個(gè)要排序的數(shù)被分成
一組,排序完成。
7、堆排序需要兩個(gè)過(guò)程,一是建立堆,二是堆頂與堆的最后一個(gè)元素
交換位置。所以堆排序有兩個(gè)函數(shù)組成。一是建堆的滲透函數(shù),二是反復(fù)調(diào)
用滲透函數(shù)
實(shí)現(xiàn)排序的函數(shù)。有最大堆和至少堆之分
堆排序是不穩(wěn)定的。算法時(shí)間復(fù)雜度0(nlog2n)?
8、歸并排序
歸并排序是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法
(DivideandConquer)的一個(gè)非常典型的應(yīng)用。
歸并排序是一種較穩(wěn)定的排序時(shí)間復(fù)雜度為時(shí)間O(nlogn)
9、基數(shù)排序
基數(shù)排序的方式可以采用LSD(Leastsignificantdigital)或者M(jìn)SD
(Mostsignificantdigital),LSD的排序方式由鍵值的最右邊開(kāi)始,而
MSD則相反,由鍵值的最左邊開(kāi)始。
基數(shù)排序是一種不穩(wěn)定的排序,時(shí)間復(fù)雜度為:0(d(n+radix))
B)概要設(shè)計(jì):
voidinsertsort(int*a);〃插入排序函數(shù)
voidBinsertsort(int*a);〃折半插入排序函數(shù)
voidbubble_sort(int*a);〃冒泡排序
voidquick_sort(int*a,intlow,inthigh);〃快速排序
intone_quick_sort(int*a,intlow,inthigh);〃一趟快速排
序
voidselect_sort(int*a);//直接選擇排序
voidmerge_sort(int*a,intlow,inthigh);勵(lì)/并排序
voidmsort(int*a,intlow,inthigh,intmid);〃歸并排序調(diào)用
函數(shù)
voidhead_sort(int*a);〃堆排序函數(shù)
voidhead_adgust(int*a,intlow,inthigh);//堆排序調(diào)用
函數(shù)
intmax_select_sort(int*a,intt);選/擇最大數(shù)
voidshell_insert(int*a,intdk);〃希爾排序調(diào)用函數(shù)
voidshell_sort(int*a);〃希爾排序函數(shù)
voiddadix_sort(int*a);〃技術(shù)排序函數(shù)
intcmpl(inta,intb);〃sort()函數(shù)里面的比較函數(shù)
intcmp2(inta,intb);〃sort()函數(shù)里面的比較函數(shù)
voidrand_sort(int*a);/隨機(jī)產(chǎn)生函數(shù)
voiddisplay(int*a);/打/印數(shù)組
c)詳細(xì)設(shè)計(jì):
//12.cpp:Definestheentrypointfortheconsoleapplication.
//
Sinclude<iostream>
Sinclude<algorithm>
usingnamespacestd;
inta[15];〃排序數(shù)組
intlen=15;〃數(shù)組長(zhǎng)度
voidinsertsort(int*a);〃插入排序函數(shù)
voidBinsertsort(int*a);〃折半插入排序函數(shù)
voidbubble_sort(int*a);〃冒泡排序
voidquick_sort(int*a,intlow,inthigh);〃快速排序
intone_quick_sort(int*a,int1w,inthigh);〃一趟快速排
序
voidselect_sort(int*a);〃直接選擇排序
voidmerge_sort(int*a,intlow,inthigh);〃歸并排序
voidmsort(int*a,intlow,inthigh,intmid);力幺并排序調(diào)用函
數(shù)
voidhead_sort(int*a);〃堆排序函數(shù)
voidhead_adgust(int*a,intlow,inthigh);〃堆排序調(diào)
用函數(shù)
intmax_select_sort(int*a,intt)〃選擇最大數(shù)
voidshell_insert(int*a,intdk);〃希爾排序調(diào)用函
數(shù)
voidshell_sort(int*a);〃希爾排序函數(shù)
voiddadix_sort(int*a);〃技術(shù)排序函數(shù)
intcmpl(inta,intb);〃sort()函數(shù)里面的比
較函數(shù)
intcmp2(inta,intb);〃sort()函數(shù)里面的比
較函數(shù)
voidrand_sort(int*a);〃隨機(jī)產(chǎn)生函數(shù)
voiddisplay(int*a);〃打印數(shù)組
intmain(intargc,char*argv[])
{
srand(unsigned(time(NULL)));〃產(chǎn)生隨即種子
插入排序
隨機(jī)產(chǎn)生數(shù)據(jù)
rand_sort(a);
display(a);
排序之后的數(shù)據(jù)
insertsort(a);
display(a);
cout<<endl;
折半插入排序
隨機(jī)產(chǎn)生數(shù)據(jù)
rand_sort(a);
display(a);
排序之后的數(shù)據(jù)
Binsertsort(a);
display(a);
cout<<endl;
冒泡排序
隨機(jī)產(chǎn)生數(shù)據(jù)
rand_sort(a);
display(a);
排序之后的數(shù)據(jù)
bubble_sort(a);
display(a);
cout<<endl;
快速排序
隨機(jī)產(chǎn)生數(shù)據(jù)
rand_sort(a);
display(a);
排序之后的數(shù)據(jù)
quick_sort(a,0,len-l);
display(a);
cout?endl;
選擇排序
隨機(jī)產(chǎn)生數(shù)據(jù)
rand_sort(a);
display(a);
排序之后的函數(shù)
select_sort(a);
display(a);
cout?endl;
歸并排序
隨機(jī)產(chǎn)生數(shù)據(jù)
rand_sort(a);
display(a);
排序之后的數(shù)據(jù)
merge_sort(a,0,len);
display(a);
cout?endl;
堆排序
隨機(jī)產(chǎn)生數(shù)據(jù)
rand_sort(a);
display(a);
排序之后的數(shù)據(jù)
head_sort(a);
display(a);
cout?endl;
希爾排序
隨機(jī)產(chǎn)生數(shù)據(jù)
rand_sort(a);
display(a);
排序之后的數(shù)據(jù)
shell_sort(a);
display(a);
cout?endl;
基數(shù)排序
隨機(jī)產(chǎn)生數(shù)據(jù)
rand_sort(a);
display(a);
排序之后的數(shù)據(jù)
dadix_sort(a);
display(a);
cout?endl;
return0;
)
voidinsertsort(int*a)
(
inttemp;
for(inti=1;i<len;++i)
?u\ari
If(a1zL
temp-a
aaLI1
rintj=itempa-j
f{o
-ji
a-+i-
-j+T
aJ叩
-te
voidBinsertsort(int*a)〃折半插入排序函數(shù)
(
inttemp;
intlow,high,mid;
for(inti=1;i<len;++i)
(
temp=a[i];
low=0;
high=i-1;
while(low<=high)
(
mid=(low+high)/2;
if(temp<a[mid])
high=mid-1;
else
low=mid+1;
)
for(intj=i-1;j>high;—j)
(
a[j+l]=a[j];
)
a[j+l]=temp;
voidbubble_sort(int*a)〃冒泡排序
(
inttemp;
for(inti=1;i<len;++i)
(
for(intj=0;j<len-i;++j)
(
if(a[j]>a[j+l])
(
temp=a[j];
a[j]=a[j+l];
a[j+l]=temp;
)
)
)
)
voidquick_sort(int*a,intlow,inthigh)〃快速排序
(
if(low<high)
(
intmid;
mid=one_quick_sort(a,low,high);
quick_sort(a,low,mid-1);
quick_sort(a,mid+1,high);
)
}
intone_quick_sort(int*a,intlow,inthigh)//一趟快速排序
(
inttemp;
while(low<high)
while(a[lowj<=a[high]&&low<high)
—high;
)
temp=a[low];
a[low]=a[high];
a[high]=temp;
while(a[low]<=a[high]&&low<high)
(
++low;
)
temp=a[high];
a[high]=a[low];
a[low]=temp;
)
returnlow;
)
voidselect_sort(int*a)〃直接選擇排序
(
intn,temp;
intt=len-1;
for(intj=len-1;j>=0;—j,—t)
(
n=max_select_sort(a,t);
if(j!=n)
(
temp=a[n];
a[n]=a[j];
a[j]=temp;
intmax_select_sort(intintt)〃選擇最大數(shù)
(
inttemp=a[0];
intflag=0;
for(inti=0;i<=t;++i)
(
if(a[i]>temp)
(
temp=a[i];
flag=i;
)
)
returnflag;
voidmerge_sort(int*a,intlow,inthigh)〃歸并排序
(
if(low<high)
(
intmid=(low+high)/2;
merge_sort(a,low,mid);
merge_sort(a,mid+1,high);
msort(a,low,high,mid);
)
)
voidmsort(int*a,intlow,inthigh,intmid)〃歸并排序調(diào)用函
數(shù)
(
inti=low,j=mid+1,*b,r=0;
b=newint[high-low];
while(i<=mid&&j<=high)
(
if(a[i]<=a[j])
(
b[r]=a[i];
++r;
++i;
)
else
(
b[r]=a[j];
++j;
++r;
)
)
while(i<=mid)
(
b[r]=a[i];
++r;
++i;
)
while(j<=high)
(
b[r]=a[j]:
++j:
++r;
for(i=low,j=0;i<=high;++i,++j)
a[i]=b[j];
voidhead_sort(int*a)〃推排序
(
inttemp;
for(inti=len/2-1;i>=0;-i)
(
head_adgust(a,i,len);
)
for(i二len-1;i>=0;-i)
(
temp=a[0];
a[0]=a[i];
a[i]=temp;
head_adgust(a,0,i-1);
)
)
voidhead_adgust(int*a,intlow,inthigh)〃調(diào)整的最大堆
(
inttemp;
for(inti=2*low+1;i<high;i=i*2+1)
(
if(a[i]<a[i+l])
(
++i;
)
if(a[low]>a[i])
(
break;
}
else
(
temp=a[low];
atlow]=a[i];
a[i]=temp;
low=i;
voidshell_insert(int*a,intdk)希爾插入函數(shù)
inttemp;
for(inti=dk;i<len;++i)
if(a[i]<a[i_dk])
temp=a[i];
for(intj=i-dk;j>=0&&temp<a[j]j=j-dk)
(
a[j+dk]=a[j];
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版模具材料供應(yīng)與設(shè)備租賃合作協(xié)議2篇
- 美甲店二零二五年度供應(yīng)鏈管理及采購(gòu)合同4篇
- 小學(xué)高年級(jí)學(xué)生的自主學(xué)習(xí)能力在語(yǔ)文教學(xué)中的培養(yǎng)策略
- 智慧辦公啟迪思維提升工作效率的新方法
- 2025版事業(yè)單位管理崗位聘用合同范本3篇
- 2025年新型停車(chē)場(chǎng)運(yùn)營(yíng)管理服務(wù)出租協(xié)議4篇
- 2025年度跨境電商進(jìn)口米面糧油品牌代理合同4篇
- 2025年度民用爆破工程爆破作業(yè)人員資質(zhì)認(rèn)證合同4篇
- 2025版信托資金借貸合同稅收優(yōu)惠條款范本3篇
- 娃娃機(jī)社交媒體營(yíng)銷(xiāo)合同(二零二五)2篇
- 南通市2025屆高三第一次調(diào)研測(cè)試(一模)地理試卷(含答案 )
- 重癥患者家屬溝通管理制度
- 法規(guī)解讀丨2024新版《突發(fā)事件應(yīng)對(duì)法》及其應(yīng)用案例
- 銷(xiāo)售提成對(duì)賭協(xié)議書(shū)范本 3篇
- 勞務(wù)派遣招標(biāo)文件范本
- 信息安全意識(shí)培訓(xùn)課件
- Python試題庫(kù)(附參考答案)
- 碳排放管理員 (碳排放核查員) 理論知識(shí)考核要素細(xì)目表三級(jí)
- 2024年河北省中考數(shù)學(xué)試題(含答案解析)
- 小學(xué)二年級(jí)數(shù)學(xué)口算練習(xí)題1000道
- 納布啡在產(chǎn)科及分娩鎮(zhèn)痛的應(yīng)用
評(píng)論
0/150
提交評(píng)論