2012年11月8日 星期四

陣列的排序

將陣列內的數字排列大小後顯示出來
使用之前的輸入成績的程式來加東西

程式:
import java.util.Scanner;

public class Test{

    public static void main(String[] args){

        System.out.println("請輸入班級人數:");
        Scanner a = new Scanner(System.in);

        int num = a.nextInt();
        int[] t = new int[num];
        System.out.println("請輸入考試分數:");

        for(int i = 0; i < num; i++){
            t[i]=a.nextInt();
        }

        for(int i = 0; i < num; i++){
            System.out.println("第"+(i+1)+"個人"+t[i]+"分");
        }

//這段開始作成績排序       
        System.out.println("成績排序");
        for(int x=0;x<t.length-1; x++){
            for(int y=x+1;y<t.length; y++){
                if(t[y] > t[x]){
                    int tmp = t[y];
                    t[y] = t[x];
                    t[x] = tmp;
                }
            }
        }

       
        for(int j=0; j<t.length; j++){
            System.out.println("第"+(j+1)+"名"+t[j]+"分");
        }
       

    }
}

結果:
請輸入班級人數:
5
請輸入考試分數:
10
30
20
50
40
第1個人10分
第2個人30分
第3個人20分
第4個人50分
第5個人40分
成績排序
第1名50分
第2名40分
第3名30分
第4名20分
第5名10分


單把成績排序那段拿出來看好了

        for(int x=0;x<t.length-1; x++){
            for(int y=x+1;y<t.length; y++){
                if(t[y] > t[x]){
                    int tmp = t[y];
                    t[y] = t[x];
                    t[x] = tmp;
                }
            }
        }

這段程式使用了兩個for迴圈來做數字大小的比較

第一個 for 宣告了 int x ,需要的範圍是0~3
第二個 for 宣告了 int y ,需要的範圍則是1~4

if 則開始判斷 t[y] > t[x] 的時候,將兩個數值交換

然後依序下去判斷接下來的數值,來進行排序

推算如下:

判斷式    如果後面真的比前面大 排序就交換,否則不換
t[1] > t[0] 30 10 20 50 40
t[2] > t[0] 30 10 20 50 40
t[3] > t[0] 50 30 10 20 40
t[4] > t[0] 50 30 10 20 40

t[2] > t[1] 50 30 10 20 40
t[3] > t[1] 50 30 10 20 40
t[4] > t[1] 50 40 30 10 20

t[3] > t[2] 50 40 30 10 20
t[4] > t[2] 50 40 30 10 20

t[4] > t[3] 50 40 30 20 10

完成排序

沒有留言:

張貼留言