C語(yǔ)言冒泡排序法的排序規(guī)則:
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比興山網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式興山網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋興山地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。
將被排序的記錄數(shù)組R[1..n]垂直排列,每個(gè)記錄R看作是重量為R.key的氣泡。根據(jù)輕氣泡不能在重氣泡之下的原則,從下往上掃描數(shù)組R:凡掃描到違反本原則的輕氣泡,就使其向上"飄浮"。如此反復(fù)進(jìn)行,直到最后任何兩個(gè)氣泡都是輕者在上,重者在下為止。
初始 R[1..n]為無(wú)序區(qū)。
第一趟掃描 從無(wú)序區(qū)底部向上依次比較相鄰的兩個(gè)氣泡的重量,若發(fā)現(xiàn)輕者在下、重者在上,則交換二者的位置。
即依次比較(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);對(duì)于每對(duì)氣泡(R[j+1],R[j]),若R[j+1].keyR[j].key,則交換R[j+1]和R[j]的內(nèi)容。 第一趟掃描完畢時(shí),"最輕"的氣泡就飄浮到該區(qū)間的頂部,即關(guān)鍵字最小的記錄被放在最高位置R[1]上。
第二趟掃描 掃描R[2..n]。
掃描完畢時(shí),"次輕"的氣泡飄浮到R[2]的位置上…… 最后,經(jīng)過n-1 趟掃描可得到有序區(qū)R[1..n] 注意: 第i趟掃描時(shí),R[1..i-1]和R[i..n]分別為當(dāng)前的有序區(qū)和無(wú)序區(qū)。掃描仍是從無(wú)序區(qū)底部向上直至該區(qū)頂部。掃描完畢時(shí),該區(qū)中最輕氣泡飄浮到頂部位置R上,結(jié)果是R[1..i]變?yōu)樾碌挠行騾^(qū)。
c語(yǔ)言冒泡排序的編程為:
#include stdio.h
void sort(int *a,int len)
{int i=0;
int j;
int t;
for(i=0;ilen-1;i++)[1]
{
for(j=0;jlen-i-1;j++)
{
if(a[j]a[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;
}
冒泡排序是排序算法的一種,思路清晰,代碼簡(jiǎn)潔,常被用在大學(xué)生計(jì)算機(jī)課程中。“冒泡”這個(gè)名字的由來是因?yàn)樵酱蟮脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端,故名。這里以從小到大排序?yàn)槔M(jìn)行講解。基本思想及舉例說明
冒泡排序的基本思想就是不斷比較相鄰的兩個(gè)數(shù),讓較大的元素不斷地往后移。經(jīng)過一輪比較就,選出最大的數(shù);經(jīng)過第2輪比較,就選出次大的數(shù),以此類推。下面以對(duì) 3 2 4 1 進(jìn)行冒泡排序說明。
1.這個(gè)算法用rand函數(shù)產(chǎn)生新的要排序的數(shù)據(jù),與已有的有序數(shù)列中的數(shù)據(jù)依次比較,如果遇到比他大的數(shù)據(jù),就從該數(shù)據(jù)開始,一直交換到末尾,達(dá)到一個(gè)插入的效果。從而形成有序的數(shù)列。
2.此外,只用rand函數(shù)并不能達(dá)到真正隨機(jī)的效果。如果要實(shí)現(xiàn)真正隨機(jī)的效果,還要配合srand函數(shù)才行。
3.具體代碼如下:#include "stdio.h"#include "stdlib.h"void main(){int a[10],temp,r; printf("請(qǐng)輸入一個(gè)種子\n"); scanf("%d",r);srand(r); for(int i=0;i9;i++) 。
冒泡排序法,是C語(yǔ)言常用的排序算法之一,意思是對(duì)一組數(shù)字進(jìn)行從大到小或者從小到大排序的一種算法。
具體方法是:
相鄰數(shù)值兩兩交換。從第一個(gè)數(shù)值開始,如果相鄰兩個(gè)數(shù)的排列順序與我們的期望不同,則將兩個(gè)數(shù)的位置進(jìn)行交換(對(duì)調(diào));如果其與我們的期望一致,則不用交換。重復(fù)這樣的過程,一直到最后沒有數(shù)值需要交換,則排序完成。
C語(yǔ)言常見的排序算法:
1、冒泡排序
基本思想:比較相鄰的兩個(gè)數(shù),如果前者比后者大,則進(jìn)行交換。每一輪排序結(jié)束,選出一個(gè)未排序中最大的數(shù)放到數(shù)組后面。
2、快速排序
基本思想:選取一個(gè)基準(zhǔn)元素,通常為數(shù)組最后一個(gè)元素(或者第一個(gè)元素)。從前向后遍歷數(shù)組,當(dāng)遇到小于基準(zhǔn)元素的元素時(shí),把它和左邊第一個(gè)大于基準(zhǔn)元素的元素進(jìn)行交換。在利用分治策略從已經(jīng)分好的兩組中分別進(jìn)行以上步驟,直到排序完成。
3、直接插入排序
基本思想:和交換排序不同的是它不用進(jìn)行交換操作,而是用一個(gè)臨時(shí)變量存儲(chǔ)當(dāng)前值。當(dāng)前面的元素比后面大時(shí),先把后面的元素存入臨時(shí)變量,前面元素的值放到后面元素位置,再到最后把其值插入到合適的數(shù)組位置。
4、直接選擇排序
基本思想:依次選出數(shù)組最小的數(shù)放到數(shù)組的前面。首先從數(shù)組的第二個(gè)元素開始往后遍歷,找出最小的數(shù)放到第一個(gè)位置。再?gòu)氖O聰?shù)組中找出最小的數(shù)放到第二個(gè)位置。以此類推,直到數(shù)組有序。
以上內(nèi)容參考? ?百度百科-排序算法、百度百科-c語(yǔ)言冒泡排序
冒泡排序,是一種計(jì)算機(jī)科學(xué)領(lǐng)域的較簡(jiǎn)單的排序算法。它重復(fù)地走訪過要排序的元素列,依次比較兩個(gè)相鄰的元素,如果順序(如從大到小、首字母從Z到A)錯(cuò)誤就把他們交換過來。走訪元素的工作是重復(fù)地進(jìn)行直到?jīng)]有相鄰元素需要交換,也就是說該元素列已經(jīng)排序完成。
這個(gè)算法的名字由來是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端,就如同碳酸飲料中二氧化碳的氣泡最終會(huì)上浮到頂端一樣,故名“冒泡排序”。
冒泡排序就是把小的元素往前調(diào)或者把大的元素往后調(diào):
比較是相鄰的兩個(gè)元素比較,交換也發(fā)生在這兩個(gè)元素之間。所以,如果兩個(gè)元素相等,是不會(huì)再交換的;如果兩個(gè)相等的元素沒有相鄰,那么即使通過前面的兩兩交換把兩個(gè)相鄰起來,這時(shí)候也不會(huì)交換,所以相同元素的前后順序并沒有改變,所以冒泡排序是一種穩(wěn)定排序算法。
冒泡排序每一趟排序把最大的放在最右邊。
比如:
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;
}