回覆列表
  • 1 # 風信子視野

    於少數的數字的排列,可以透過簡單的if巢狀語句便可將所有情況列舉出來;

    但是一旦要比較的數字較多,這種方法便缺少了可執行性;

    因此,我們可以採用陣列的思想來進行程式設計;

    此處以:將10個數按從小到大排列輸出 舉例:

    #include"stdio.h"

    #define N 10

    int main ()

    {

    int a[N];

    int i,j,t;

    printf("Please input %d numbers:\n",N);

    for(i<0;i<N;i++)

    {

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

    }

    for(i=1;i<=N-1;i++)

    {

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

    {

    if(a[j]>a[j+1])

    {

    t=a[j];a[j]=a[j+1];a[j+1]=t;

    }

    }

    }

    printf("The resortrd numbers is :\n");

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

    {

    printf("%-4d",a[i]);

    }

    }

    附:

    程式開頭採用了定義一個宏常量的方法,可以透過改變該常量來對程式進行整體的改變;增加了程式的靈活性,方便對源程式進行修改;

    如果要按從大到小的排列方式進行排列,僅僅需要更改程式中的一處,此處便不再詳細說明,自己探討^_^

  • 2 # 碼中尋樂

    氣泡排序的原理就是每一輪遍歷資料都將本輪的最大數拖動到末尾,遍歷完排序也完成了。

    排序程式碼截圖如下:

    呼叫排序函式:

    輸出結果:1 2 3 4 5 7 9 15

  • 3 # TonyDeng

    冒泡演算法的思路: 正如象形,每次冒一個泡泡,又如挑雞蛋。先迴圈一次,找出最小或最大的那個元素(未必是數值,比較規則按需要而定,要懂靈活),放到一端,那麼這個已找到的就不用再管了,再把剩下的按同樣方法找一次,一直找完。這裡要注意一點就是,由於每次都把已經找到的元素依次排好,那麼剩下需要挑揀的就越來越少,在演算法上體現這一點。

    弄懂了這個基本思路,剩下就是你的創造性。比如,對資料量大的情形,可以分而治之,按一定的比例把資料分割為若干片,分別排序(對某些支援平行計算的環境而言這是好主意),每片都排好後就可以考慮插入歸併了。不是所有演算法都可以在記憶體中完成的,外排序更常見,都要採用分割法。

    總之,無論思考甚麼演算法,都要構思一個模型,想像手工如何操作,把每一個步驟都考慮清楚,看是否合理,最後才動手編碼。路子有樣板,但具體無定型,靠背具體演算法程式碼是不夠出來對付現實的。

  • 4 # 電子產品設計方案

    冒泡法其實就是迴圈把大的數(或者小的數)往上推

    冒泡法是非常經典的陣列排序演算法,只需要兩個迴圈語句就可以把陣列按從大到小或者從小到大排好。就像冒泡泡一樣,把小的(或者大的)往上冒,就可以得到我們需要的結果了。

    冒泡法原理

    以從大到小排序排序為例

    先從最前面兩個數開始,比較大小,如果第一個數比第二個數小,就交換位置,否則保持位置不變;接著比較第二個數和第三個數,如果第二個數比第三個數小,就交換位置,否則保持位置不變;依此類推,最小的數就到了最頂端了;接著進行第二輪冒泡,同樣是從前面的兩個數開始比較,因為經過第一輪冒泡後,最小的數已經在最上面的,第二輪冒泡到倒數第二個就可以了。由此可見,N個數的陣列,需要進行N-1輪冒泡,第一輪冒泡要進行N-1次比較,第二輪進行N-2次冒泡,依此類推。冒泡法C語言程式

    以C語言為例,我們可以用兩個for迴圈實現冒泡法演算法。當然除了用for還可以用while哦,大家可以思考一下。

  • 中秋節和大豐收的關聯?
  • 平臺有權力要求商家“二選一”嗎?