日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言入门自学书籍推荐6,菜鸟自学嵌入式之C语言基础No6 算法分析

發(fā)布時(shí)間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言入门自学书籍推荐6,菜鸟自学嵌入式之C语言基础No6 算法分析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、冒泡法(起泡法)

算法要求:用起泡法對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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。