c语言如何用气泡法编程最大 最小值,[c语言冒泡排序法]C语言冒泡排序法详解
篇一 : C語言冒泡排序法詳解
[冒泡排序]C語言冒泡排序法詳解——簡介
相信學(xué)過C語言的朋友都知道,在C語言中,常用的排序算法有:冒泡排序、快速排序、插入排序、選擇排序、希爾排序、堆排序以及歸并排序等等。就算沒有用過,相信大家也有所耳聞。在這里呢,小編主要是想和大家一起來探討探討C語言的冒泡排序法,大家有什么好的建議可以在評論里給我留言,希望我們相互學(xué)習(xí),共同進(jìn)步。
[冒泡排序]C語言冒泡排序法詳解——知識點(diǎn)
Visual C++6.0軟件[冒泡排序]C語言冒泡排序法詳解——第一講:冒泡排序法基本原理
[冒泡排序]C語言冒泡排序法詳解 一
所謂冒泡排序法,就是對一組數(shù)字進(jìn)行從大到小或者從小到大排序的一種算法。具體方法是,相鄰數(shù)值兩兩交換。從第一個數(shù)值開始,如果相鄰兩個數(shù)的排列順序與我們的期望不同,則將兩個數(shù)的位置進(jìn)行交換(對調(diào));如果其與我們的期望一致,則不用交換。重復(fù)這樣的過程,一直到最后沒有數(shù)值需要交換,則排序完成。一般地,如果有N個數(shù)需要排序,則需要進(jìn)行(N-1)趟起泡,我們以從小到大排序?yàn)槔齺砜匆幌?#xff0c;具體情況如下圖所示:
[冒泡排序]C語言冒泡排序法詳解——第二講:C語言程序的實(shí)現(xiàn)
[冒泡排序]C語言冒泡排序法詳解 一
首先,為了實(shí)現(xiàn)效果,我們得先定義一組待排序的數(shù)列以及各個變量。具體情況如下圖:
[冒泡排序]C語言冒泡排序法詳解 二
算法的實(shí)現(xiàn),具體情況如圖:
[冒泡排序]C語言冒泡排序法詳解 三
運(yùn)行結(jié)果顯示。具體情況如圖:
[冒泡排序]C語言冒泡排序法詳解——第三講:在上一講的基礎(chǔ)上對程序算法進(jìn)行優(yōu)化
[冒泡排序]C語言冒泡排序法詳解 一
按照上面的程序,在第五趟(i=5)起泡時,計算機(jī)不僅要對“1,5,6,4”兩兩進(jìn)行比較并排序,還要對“7,8,9,13”進(jìn)行兩兩比較并排序,而“7,8,9,13”在第四趟起泡時就已經(jīng)排序好了,所以再進(jìn)行比較的話,就顯得非常多余。圖示如下:
[冒泡排序]C語言冒泡排序法詳解 二
在上面程序的基礎(chǔ)上進(jìn)行優(yōu)化。具體情況如圖所示:
[冒泡排序]C語言冒泡排序法詳解 三
優(yōu)化后的輸出結(jié)果。如圖所示:
[冒泡排序]C語言冒泡排序法詳解——尾聲:
[冒泡排序]C語言冒泡排序法詳解 一
C語言冒泡排序法,我們就談到這里了,你理解了嗎?是不是很簡單啊,學(xué)習(xí)記得要記筆記哦!
篇二 : C語言中冒泡法、選擇法、插入法三種常見排序算法分析
一、冒泡法(起泡法)
算法要求:用起泡法對10個整數(shù)按升序排序。
算法分析:如果有n個數(shù),則要進(jìn)行n-1趟比較。在第1趟比較中要進(jìn)行n-1次相鄰元素的兩兩比較,在第j趟比較中要進(jìn)行n-j次兩兩比較。比較的順序從前往后,經(jīng)過一趟比較后,將最值沉底(換到最后一個元素位置),最大值沉底為升序,最小值沉底為降序。
算法源代碼:
# 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個數(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):相鄰元素兩兩比較,每趟將最值沉底即可確定一個數(shù)在結(jié)果的位置,確定元素位置的順序是從后往前,其余元素可能作相對位置的調(diào)整。可以進(jìn)行升序或降序排序。
二、選擇法
算法要求:用選擇法對10個整數(shù)按降序排序。
算法分析:每趟選出一個最值和無序序列的第一個數(shù)交換,n個數(shù)共選n-1趟。第i趟假設(shè)i為最值下標(biāo),然后將最值和i+1至最后一個數(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)前趟的第一個數(shù)為最值,記在k中 */
for(j=i+1;j
if(a[k]
k=j; /*則將其下標(biāo)記在k中*/www.2cto.com
if(k!=i) /*若k不為最初的i值,說明在其后找到比其更大的數(shù)*/
{ t=a[k]; a[k]=a[i]; a[i]=t; } /*則交換最值和當(dāng)前序列的第一個數(shù)*/
}
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
算法特點(diǎn):每趟是選出一個最值確定其在結(jié)果序列中的位置,確定元素的位置是從前往后,而每趟最多進(jìn)行一次交換,其余元素的相對位置不變。可進(jìn)行降序排序或升序排序。
三、插入法
算法要求:用插入排序法對10個整數(shù)進(jìn)行降序排序。
算法分析:將序列分為有序序列和無序列,依次從無序序列中取出元素值插入到有序序列的合適位置。初始是有序序列中只有第一個數(shù),其余n-1個數(shù)組成無序序列,則n個數(shù)需進(jìn)n-1次插入。尋找在有序序列中插入位置可以從有序序列的最后一個數(shù)往前找,在未找到插入點(diǎn)之前可以同時向后移動元素,為插入元素準(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個數(shù)從第2個數(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)前元素后移一個位置*/
a[j+1]=t; /*找到插入位置,完成插入*/
}
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
算法特點(diǎn):每趟從無序序列中取出第一個數(shù)插入到有序序列的合適位置,元素的最終位置在最后一趟插入后才能確定位置。也可是先用循環(huán)查找插入位置(可從前往后或從后往前),再將插入位置之后的元素(有序列中)逐個后移一個位置,最后完成插入。該算法的特點(diǎn)是在尋找插入位置的同時完成元素的移動。因?yàn)樵氐囊苿颖仨殢暮笸?#xff0c;則可將兩個操作結(jié)合在一起完成,提高算法效率。仍可進(jìn)行升序或降序排序。
摘自 離草的伊甸園
擴(kuò)展:c語言冒泡排序 / 冒泡法排序 c語言 / c語言冒泡排序代碼
總結(jié)
以上是生活随笔為你收集整理的c语言如何用气泡法编程最大 最小值,[c语言冒泡排序法]C语言冒泡排序法详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络岗7 97用户破解图片
- 下一篇: 想让“贾维斯”成为现实?物联网帮你拥有