c语言入门自学书籍推荐6,菜鸟自学嵌入式之C语言基础No6 算法分析
一、冒泡法(起泡法)
算法要求:用起泡法對10個(gè)整數(shù)按升序排序。
算法分析:如果有n個(gè)數(shù),則要進(jìn)行n-1趟比較。在第1趟比較中要進(jìn)行n-1次相鄰元素的兩兩比較,在第j趟比較中要進(jìn)行n-j次兩兩比較。比較的順序從前往后,經(jīng)過一趟比較后,將最值沉底(換到最后一個(gè)元素位置),最大值沉底為升序,最小值沉底為降序。
算法源代碼:
# include
main()
{
int a[10],i,j,t;
printf("Please input 10 numbers: ");
/*輸入源數(shù)據(jù)*/
for(i=0;i<10;i++)
scanf("%d",&a[i]);
/*排序*/
for(j=0;j<9;j++) ? ?/*外循環(huán)控制排序趟數(shù),n個(gè)數(shù)排n-1趟*/
for(i=0;i<9-j;i++) ? /*內(nèi)循環(huán)每趟比較的次數(shù),第j趟比較n-j次*/
if(a[i]>a[i+1]) ? ?/*相鄰元素比較,逆序則交換*/
{ t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
/*輸出排序結(jié)果*/
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ? ",a[i]);
printf("\n");
}
算法特點(diǎn):相鄰元素兩兩比較,每趟將最值沉底即可確定一個(gè)數(shù)在結(jié)果的位置,確定元素位置的順序是從后往前,其余元素可能作相對位置的調(diào)整。可以進(jìn)行升序或降序排序。
二、選擇法
算法要求:用選擇法對10個(gè)整數(shù)按降序排序。
算法分析:每趟選出一個(gè)最值和無序序列的第一個(gè)數(shù)交換,n個(gè)數(shù)共選n-1趟。第i趟假設(shè)i為最值下標(biāo),然后將最值和i+1至最后一個(gè)數(shù)比較,找出最值的下標(biāo),若最值下標(biāo)不為初設(shè)值,則將最值元素和下標(biāo)為i的元素交換。
算法源代碼:
# include
main()
{
int a[10],i,j,k,t,n=10;
printf("Please input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i
{
k=i; ? ? ? ? ? ? /*假設(shè)當(dāng)前趟的第一個(gè)數(shù)為最值,記在k中 */
for(j=i+1;j
if(a[k]
k=j; ? ? ? ? /*則將其下標(biāo)記在k中*/
if(k!=i) ? ? ? ?/*若k不為最初的i值,說明在其后找到比其更大的數(shù)*/
{ ?t=a[k]; ?a[k]=a[i]; ?a[i]=t; ?} /*則交換最值和當(dāng)前序列的第一個(gè)數(shù)*/
}
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ? ",a[i]);
printf("\n");
}
算法特點(diǎn):每趟是選出一個(gè)最值確定其在結(jié)果序列中的位置,確定元素的位置是從前往后,而每趟最多進(jìn)行一次交換,其余元素的相對位置不變。可進(jìn)行降序排序或升序排序。
三、插入法
算法要求:用插入排序法對10個(gè)整數(shù)進(jìn)行降序排序。
算法分析:將序列分為有序序列和無序列,依次從無序序列中取出元素值插入到有序序列的合適位置。初始是有序序列中只有第一個(gè)數(shù),其余n-1個(gè)數(shù)組成無序序列,則n個(gè)數(shù)需進(jìn)n-1次插入。尋找在有序序列中插入位置可以從有序序列的最后一個(gè)數(shù)往前找,在未找到插入點(diǎn)之前可以同時(shí)向后移動(dòng)元素,為插入元素準(zhǔn)備空間。
算法源代碼:
# include
main()
{
int a[10],i,j,t;
printf("Please input 10 numbers: ");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++) /*外循環(huán)控制趟數(shù),n個(gè)數(shù)從第2個(gè)數(shù)開始到最后共進(jìn)行n-1次插入*/
{
t=a[i]; ? ? /*將待插入數(shù)暫存于變量t中*/
for( j=i-1 ; j>=0 && t>a[j] ; j-- ) /*在有序序列(下標(biāo)0 ~ i-1)中尋找插入位置*/
a[j+1]=a[j]; /*若未找到插入位置,則當(dāng)前元素后移一個(gè)位置*/
a[j+1]=t; ? ? ? ?/*找到插入位置,完成插入*/
}
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ? ",a[i]);
printf("\n");
}
算法特點(diǎn):每趟從無序序列中取出第一個(gè)數(shù)插入到有序序列的合適位置,元素的最終位置在最后一趟插入后才能確定位置。也可是先用循環(huán)查找插入位置(可從前往后或從后往前),再將插入位置之后的元素(有序列中)逐個(gè)后移一個(gè)位置,最后完成插入。該算法的特點(diǎn)是在尋找插入位置的同時(shí)完成元素的移動(dòng)。因?yàn)樵氐囊苿?dòng)必須從后往前,則可將兩個(gè)操作結(jié)合在一起完成,提高算法效率。仍可進(jìn)行升序或降序排序。
總結(jié)
以上是生活随笔為你收集整理的c语言入门自学书籍推荐6,菜鸟自学嵌入式之C语言基础No6 算法分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言实参形参函数调用指针引用 符号实例
- 下一篇: c语言实战1200例 pdf6,C语言程