我寫了個簡單程式,不知道這算不算氣泡排序?

2024-12-30 00:40:27 字數 4987 閱讀 1618

1樓:網友

算的。恕我多言,你的程式不夠精簡。

int head = 0;

int n = 18;

這兩句**是多餘的。。

把for(int i=head;i等你編寫大程式時就會知道優化精簡程式是多麼重要了。

2樓:天高歪歪

#include

#include

#include

struct x

int num;

struct x *next;

main()

int i,j,temp=0,d,e,a;

struct x *p1,*p2,*tail,*head;

p1=p2=tail=head=0;

printf("請輸入個數:")

scanf("%d",&a);

for (d=1;d<=a;d++)

if (1 ==d)

p1=(struct x*)malloc(sizeof(struct x));

p2=tail=head=p1;

elsep1=(struct x*)malloc(sizeof(struct x));

tail->next=p1;

tail=p1;

p1=head;

printf("請輸入%d個數字:",a);

for (i=1;i<=a;i++)

scanf("%d",&p1->num);

if (p1->next!=null)

p1=p1->next;

p2=p1=head;

for(i = 0;i < a;i++

for(j=a-1-i,p2=head; j < a;j++if (p1->num > p2->num)temp=p2->num;

p2->num=p1->num;

p1->num=temp;

if (p2->next!=null)

p2=p2->next;

if (p1->next!=null)

p1=p1->next;

p1=head;

for (i=0; i < a;i++)

printf ("d ",p1->num);

if (p1->next!=null)

p1=p1->next;

氣泡排序演算法有幾種寫法?

3樓:逐

氣泡排序演算法有兩種,一種是從大到小排,另一種是從小到大排。

氣泡排序依次比較兩個相鄰的元素,如果他們的順序(如從大到小、首字母從a到z)錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。

氣泡排序最核心的思想就是相鄰的兩個元素相比較,符合冒泡的才冒泡,重複多次執行,待最後沒有需要冒泡的元素時才停止執行,表示排序已經完成。

氣泡排序也是一種穩定排序演算法。因為氣泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。

所以,如果兩個元素相等,是不會再交換的;如果兩個相等的元素沒有相鄰,那麼即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前後順序並沒有改變。

4樓:維維豆奶

有兩種寫法。

第一種思路:score[j] 和 score[j+1] 比較,如果前者比後者小,把前者和後者調換順序,兩兩調換後一輪下來,最小的會被排到最後去。實現**如下:

第二種思路:用 88 和 75 比較,再和69比較,再和 67 比較,發現88是最大的,把他排到第一位;然後 i=1,也就是第二輪,就不用看下標為 0 的 88 了。實現**如下:

這就是氣泡排序的兩種寫法。

5樓:18個褶的裙襬

氣泡排序演算法有2種。

它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端,故名。

假設有乙個大小為 n 的無序序列。氣泡排序就是要每趟排序過程中通過兩兩比較,找到第 i 個小(大)的元素,將其往上排。

假設有乙個無序序列。

思路:1、先比較第 1 位和第 2 位的大小,12<35,因為希望越小越靠後,所以要調整兩者順序,交換後的結果:35 12 99 18 76

2、現在比較第 2 位和第 3 位的大小,12<99,所以需要交換位置,交換後的結果為:35 99 12 18 76

3、接著比較第 3 位和第 4 位的大小,12<18,交換後的結果為:35 99 18 12 76

4、最後比較第 4 位和第 5 位的大小,12<76,交換後的結果為:35 99 18 76 12

5、經過 4 次後我們發現 5 個數中最小的乙個數已經就位,每將乙個數歸位我們稱其為「一趟」

6、現在我們開始第二趟,目標將第 2 小的數歸位,根據之前邏輯,還是從第 1 個數和第 2 個數開始比較上:35 99 18 76 12 --99 35 18 76 12 --99 35 18 76 12 --99 35 76 18 12,在第一趟比較就知道第 5 位是最小的,所以第 4 位不用和第 5 位比較,這一趟只需比較 3 次。

7、第3趟:99 35 76 18 12 --99 35 76 18 12 --99 76 35 18 12 (比較 2 次)

8、第4趟:99 76 35 18 12 --99 76 35 18 12 ,有4個數已經就位,那麼最後乙個數無須比較,它就是最大的。

總結: 如果有 n 個數進行排序,只需將 n-1 個數歸位,即要進行 n-1 趟操作,而每一趟開始都從第 1 位進行相鄰的兩個數 進行比較,將小的那個數放在後面,已經歸位的就不用進行比較。

6樓:巴特勒船長

第一種思路:score[j] 和 score[j+1] 比較,如果前者比後者小,把前者和後者調換順序,兩兩調換後一輪下來,最小的會被排到最後去。

第二種思路:用 88 和 75 比較,再和69比較,再和 67 比較,發現88是最大的,把他排到第一位;然後 i=1,也就是第二輪,就不用看下標為 0 的 88 了,因為他是老大,然後接著比較。

氣泡排序分從大到小和從小到大兩種排序方式。它們的唯一區別就是兩個數交換的條件不同,從大到小排序是前面的數比後面的小的時候交換,而從小到大排序是前面的數比後面的數大的時候交換。我這裡只說 從小到大的排序方式。

氣泡排序的原理:從第乙個數開始,依次往後比較,如果前面的數比後面的數大就交換,否則不作處理。這就類似燒開水時,壺底的水泡往上冒的過程。

每次把相鄰的兩個比較大小,然後把大一點兒的資料放在最後面,這樣第一趟下來,最大的那個數就跑到了最後面,下一次排序就不用跟最後乙個數字比較了,然後倒數第二大的數字會在倒數第二。因此可以使用兩個函式,乙個用於控制每一趟比較的元素個數,乙個用於交換。

7樓:哭給對方

假如有幾個數字int score = ; 按照從大到小排序。

有2種思路,第一種,score[j] 和 score[j+1] 比較 如果 前者比後者小,把前者和後者調換順序,兩兩調換後一輪下來 最小的會被排到最後去。每一輪j都從0開始,當i輪排序,就有最後面的i個數字因為他是最小的,所以後面的每輪都不用理他了,也就是 往後的數不用管了,如上,第一輪有4個數字 i為0 ,那麼 為3,也就是下標是3以後的可以不用管,3往後沒有數字,所以第一輪所有的數字都要參加比較,第二輪i=1 為2 也就是說 下標2後面的 下標為3的數字不用比了,因為兩兩比較厚,67會到 score[3]。

第二種思路,用88 和 75 比較,在和69 比較 在和 67 比較,發現88是最大的,吧他排到第一位(index=0的位置),然後i=1,也就是第二輪,就不用看下標為0的88了因為他是老大,然後接著比較。

8樓:月似當時

乙個是從大到小排,第二個是從小到大排。冒泡方法是一樣的,只不過第乙個玩了點花頭,同後面往前面算(跟一般人的想法不一樣)。兩個都是從小到大排序,都是在(list[i] >list[j])的情況下發生交換。

氣泡排序既可以是從小到大,也可以是從大到小。

9樓:網友

public static void main(string args);//新建乙個陣列。

for (int i=0;iarr[j+1])}//遍歷輸出。

for (int m=0;m

氣泡排序的程式**是什麼?

10樓:路堯家的顧小言

氣泡排序的程式**如下:

#include

int main()

int a[10]=;

int i=0,j=0,t=0;

for(i=0;i<10;i++)

scanf("%d",&a[i]);

for(i=0;i<10;i++)

for(j=0;j<10-i;j++)

return 0;}

任意輸入十個資料,程式執行結果:

氣泡排序**是什麼?

11樓:路堯家的顧小言

氣泡排序的程式**如下:

#include

int main()

int a[10]=;

int i=0,j=0,t=0;

for(i=0;i<10;i++)

scanf("%d",&a[i]);

for(i=0;i《源孝10;i++)

for(j=0;j<10-i;j++)

return 0;}

任意輸入十個資料,程式執行結果:

擴充套件拆裂顫資料:氣泡排序演算法的原理如下:

1、比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

2、對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

3、針對所有的元素重複以上的步驟,除了最後乙個。

4、持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

我不知道這算不算敲詐勒索就算是敲詐勒索報警也解決不了問題我該怎麼辦好心人幫我出出主意吧

你媽和合夥人的關係就是一般合夥,是靠個人信用也就是人與人的信任聯絡在一起的,既然沒有了信任,也沒有必要再合夥下去了,找到合夥人結束合夥關係,自己單幹就可以了。如果合夥在工商登記了,登出登記就可以了。自己單幹後,如果那個人還來搗亂,有兩種方法,一是報警 當然這種方法比較慢,效果也不一定 第二種嘛,就是...

我不知道這樣算不算愛,心裡覺得很窩火。。急

放棄吧,你只是他的備用,女人到這個地步其實挺可悲的,你又不是沒人要,幹嘛糟踐自己?很多女孩子在大學的時候,覺得高年級的學長什麼都好,又帥又能幹,其實屁也不是,當你進入社會,你會發現從前自己真的是鼠目寸光,不知道你讀的是什麼檔次的大學,等你工作了,有大把的名牌大學的畢業生,還有些雖然沒有學歷但是很有能...

我是新手,不知道算不算闖紅燈,今天被拍照了,不知道算不算我闖紅燈

你這不算闖紅燈,因為你在過停車線時還是綠燈,到十字路口中間時,因為其他車輛的阻擋,沒能繼續前行,在前車阻擋消失後,你的車停在路中間,而這時訊號燈已變成紅燈,如果這時你不繼續前行,將阻擋其他車輛的正常通行,因此,這時你就必須前行,這樣你的前行將不作為闖紅燈對待,而屬於正常行駛。只要是綠燈過線就不算闖紅...