十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
冒泡排序法,是C語言常用的排序算法之一,意思是對一組數(shù)字進(jìn)行從大到小或者從小到大排序的一種算法。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了三元免費(fèi)建站歡迎大家使用!
具體方法是:
相鄰數(shù)值兩兩交換。從第一個數(shù)值開始,如果相鄰兩個數(shù)的排列順序與我們的期望不同,則將兩個數(shù)的位置進(jìn)行交換(對調(diào));如果其與我們的期望一致,則不用交換。重復(fù)這樣的過程,一直到最后沒有數(shù)值需要交換,則排序完成。
C語言常見的排序算法:
1、冒泡排序
基本思想:比較相鄰的兩個數(shù),如果前者比后者大,則進(jìn)行交換。每一輪排序結(jié)束,選出一個未排序中最大的數(shù)放到數(shù)組后面。
2、快速排序
基本思想:選取一個基準(zhǔn)元素,通常為數(shù)組最后一個元素(或者第一個元素)。從前向后遍歷數(shù)組,當(dāng)遇到小于基準(zhǔn)元素的元素時,把它和左邊第一個大于基準(zhǔn)元素的元素進(jìn)行交換。在利用分治策略從已經(jīng)分好的兩組中分別進(jìn)行以上步驟,直到排序完成。
3、直接插入排序
基本思想:和交換排序不同的是它不用進(jìn)行交換操作,而是用一個臨時變量存儲當(dāng)前值。當(dāng)前面的元素比后面大時,先把后面的元素存入臨時變量,前面元素的值放到后面元素位置,再到最后把其值插入到合適的數(shù)組位置。
4、直接選擇排序
基本思想:依次選出數(shù)組最小的數(shù)放到數(shù)組的前面。首先從數(shù)組的第二個元素開始往后遍歷,找出最小的數(shù)放到第一個位置。再從剩下數(shù)組中找出最小的數(shù)放到第二個位置。以此類推,直到數(shù)組有序。
以上內(nèi)容參考? ?百度百科-排序算法、百度百科-c語言冒泡排序
C語言冒泡排序法的排序規(guī)則:將被排序的記錄數(shù)組R[1..n]垂直排列,每個記錄R看作是重量為R.key的氣泡。根據(jù)輕氣泡不能在重氣泡之下的原則,從下往上掃描數(shù)組R:凡掃描到違反本原則的輕氣泡,就使其向上"飄浮"。如此反復(fù)進(jìn)行,直到最后任何兩個氣泡都是輕者在上,重者在下為止。初始 R[1..n]為無序區(qū)。第一趟掃描 從無序區(qū)底部向上依次比較相鄰的兩個氣泡的重量,若發(fā)現(xiàn)輕者在下、重者在上,則交換二者的位置。即依次比較(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);對于每對氣泡(R[j+1],R[j]),若R[j+1].key void sort(int *a,int len) {int i=0; int j; int t; for(i=0;ia[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } } int main(int argc, char *argv[]) { int a[10]={ -999,2,3,77,12,88,0,-8,99,100 }; int i=0; sort(a,10); for(i=0;i10;i++) { printf("%d ",a[i]); } return 0; }
(1)基本思想:在要排序的一組數(shù)中,對當(dāng)前還未排好序的范圍內(nèi)的全部數(shù),自上而下對相鄰的兩個數(shù)依次進(jìn)行比較和調(diào)整,讓較大的數(shù)往下沉,較小的往上冒。即:每當(dāng)兩相鄰的數(shù)比較后發(fā)現(xiàn)它們的排序與排序要求相反時,就將它們互換。
(2)實(shí)例:
(3)代碼解釋:
#includestdio.h
int main()
{
int a[10];
int i,j,t,temp;//temp記錄臨時中間值
printf("請輸入10個數(shù):");
for (i=0;i10;i++)
{
scanf("%d",a[i]);//記錄輸入的十個數(shù)
}
for (j=1;j=9;j++)
{
t=10-j;
for (i=0;it;i++)
{
if (a[i]a[i+1]) {
//?交換兩數(shù)的位置
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
for (i=0;i=9;i++)
{
printf("%d\t",a[i]);
}
return 0;
}
望采納!
冒泡法排序函數(shù)如下:
void bubble(int a[],int n)
{int i,j,t;
for(i=0;in-1;i++)/*共進(jìn)行n-1輪*/
for(j=0;jn-1-i;j++)/*每輪在前n-i個數(shù)中比較*/
if(a[j]a[j+1]) /*若相鄰元素逆序*/
{t=a[j]; a[j]=a[j+1];a[j+1]=t;}/*就交換*/
}
void sort(int *a, int left, int right)
{
if(left = right)/*如果左邊索引大于或者等于右邊的索引就代表已經(jīng)整理完成一個組了*/
{
return ;
}
int i = left;
int j = right;
int key = a[left];
while(i j) /*控制在當(dāng)組內(nèi)尋找一遍*/
{
while(i j key = a[j])
/*而尋找結(jié)束的條件就是,1,找到一個小于或者大于key的數(shù)(大于或小于取決于你想升
序還是降序)2,沒有符合條件1的,并且i與j的大小沒有反轉(zhuǎn)*/
{
j--;/*向前尋找*/
}
a[i] = a[j];
/*找到一個這樣的數(shù)后就把它賦給前面的被拿走的i的值(如果第一次循環(huán)且key是
a[left],那么就是給key)*/
while(i j key = a[i])
/*這是i在當(dāng)組內(nèi)向前尋找,同上,不過注意與key的大小關(guān)系停止循環(huán)和上面相反,
因?yàn)榕判蛩枷胧前褦?shù)往兩邊扔,所以左右兩邊的數(shù)大小與key的關(guān)系相反*/
{
i++;
}
a[j] = a[i];
}
a[i] = key;/*當(dāng)在當(dāng)組內(nèi)找完一遍以后就把中間數(shù)key回歸*/
sort(a, left, i - 1);/*最后用同樣的方式對分出來的左邊的小組進(jìn)行同上的做法*/
sort(a, i + 1, right);/*用同樣的方式對分出來的右邊的小組進(jìn)行同上的做法*/
/*當(dāng)然最后可能會出現(xiàn)很多分左右,直到每一組的i = j 為止*/
}
冒泡排序每一趟排序把最大的放在最右邊。
比如:
87 12 56 45 78
87和12交換:12 87 56 45 78
87和56交換: ? 56 87 45 78
87和45交換: ? ? ?45 87 78
87和78交換: ? ? ? ? 78 87
到此第一趟排序結(jié)束,接下來的每一趟排序都是這樣。
#includestdio.h
void?Print(int?*num,?int?n)
{
int?i;
for(i?=?0;?i??n;?i++)
printf("%d?",?num[i]);
puts("\n");
return;
}
void?Bubble_Sort(int?*num,?int?n)
{
int?i,?j;
for(i?=?0;?i??n;?i++)
{
for(j?=?0;?i?+?j??n?-?1;?j++)
{
if(num[j]??num[j?+?1])
{
int?temp?=?num[j];
num[j]?=?num[j?+?1];
num[j?+?1]?=?temp;
}
Print(num,?n);
}
}
return;
}
int?main()
{
int?num[8]?=?{87,?12,?56,?45,?78};
Bubble_Sort(num,?5);
return?0;
}
1、打開Visual stdio 2019軟件新建空白c文件,在源文件處右擊鼠標(biāo),選擇添加下面的新建項,此時會彈出窗口:
2、彈出的窗口選擇C++文件,將文件擴(kuò)展名改為“.c”點(diǎn)擊添加完成新建c文件,之后就可以編寫程序了:
3、接下來就可以編寫程序了,首先最前面的部分為輸入數(shù)字的部分,之后的程序會對用戶輸入的數(shù)字就行排序,最后則是將結(jié)果打印出來。冒泡排序需要用到兩層循環(huán),第一層循環(huán)遍歷數(shù)組中的元素,第二層則進(jìn)行兩兩比較,如果順序不對就要對其進(jìn)行換位,直到排序完成:
4、最后執(zhí)行程序觀察結(jié)果,按下crtl+F5彈出程序,隨意輸入10個數(shù),按下回車鍵執(zhí)行結(jié)果,此時就可以看到排序后的結(jié)果了。以上就是c語言冒泡排序程序的演示: