/*C語言 氣泡排序法(二)*/
#include <stdio.h>
#include <stdlib.h>
#define num 10

void function1(int array[]),function2(int array[]);

int main()
{
    int i[num] = { 1,2,8,7,6,5,4,3,9,10 };
    
    printf("Before the change:\n");
    function1(i);
    function2(i);
    printf("After the change:\n");
    function1(i);

    system("pause");
    return 0;
}

void function1(int i[])
{
    int j;

    for (j = 0; j < num; j++)
        printf(" %d", i[j]);
    printf("\n");
}

void function2(int i[])
{
    int j, k, m, n, o = 0,move=0;

    for (n = 1; n < num && (!move); n++) 
        //(!move)的值就為1;代表true。
    {
        move = 1;

        for (j = 0; j < num- n; j++)
        {
            if (i[j] > i[j + 1])
            {
                m = i[j + 1];
                i[j + 1] = i[j];
                i[j] = m;

                move = 0;
                //如果move沒進入迴圈歸零;則停止迴圈可減少計算次數。
            }
            o++;
        }
    }
    printf("Total operation:%d\n", o);
    //計算迴圈次數
}
//可以自行嘗試將move移除。

結果為:

image

arrow
arrow
    創作者介紹
    創作者 愛學習 的頭像
    愛學習

    愛學習

    愛學習 發表在 痞客邦 留言(0) 人氣()