iT邦幫忙

0

函式呼叫-比大小問題

1.想知道如何藉由函式的呼叫,使輸入的十個數由大到小排列(第一列是輸入的數,第二列是輸出的數)
2.程式碼

# include <stdio.h>

	void fun(int a[], int);
	main()
	{
		
		int i;
		int n = 10;
		int b[n];
		for(i = 0; i < n; i = i + 1)
			scanf("%d", &b[i]);
		
		fun(b, n);
		
		for(i = 0; i < n; i = i + 1)
			printf("%d ", b[i]);
			
		
	}




	void fun(int a[], int x)
	{
		
		int k;
		int i;
		for(i = 0; i < (x - 1); i = i + 1)
		{
			if(a[i] < a[i + 1])	
			{
				k = a[i];
				a[i] = a[i + 1];
				a[i + 1] = k;
				
			}
			
			
		}
		
		
		
	}

3.執行畫面
https://ithelp.ithome.com.tw/upload/images/20200915/20128427fJF3Xw4ixz.png

1 個回答

0
小魚
iT邦大師 1 級 ‧ 2020-09-15 23:09:39
最佳解答

你這是排序法吧,
最簡單同時效率最差的是氣泡排序法,
用兩層for迴圈來處理

int k;
for(int i = 0; i < x - 1; i++)
{
    for(int j = i + 1;j < x;j++)
    {
        if(a[i] < a[j])	
        {
            k = a[i];
            a[i] = a[j];
            a[j] = k;
        }
    }
}
憤怒鳥 iT邦新手 5 級 ‧ 2020-09-15 23:42:40 檢舉

好,謝謝你的提點

小魚 iT邦大師 1 級 ‧ 2020-09-16 00:29:36 檢舉

你那個其實也是另一種氣泡排序法,
不過也是要兩層迴圈,
而且外面那層要這樣包.

int k;
for (int i = x - 1; i > 0; i--)
{
	for (int j = 0; j < i; j++)
	{
		if (a[j] < a[j+1])
		{
			k = a[j];
			a[j] = a[j+1];
			a[j+1] = k;
		}
	}
}

我要發表回答

立即登入回答