1. 程式人生 > >程式設計C 實驗四 題目一 排序查詢(0616)

程式設計C 實驗四 題目一 排序查詢(0616)

用選擇法對N個學生的成績按從大到小的順序排序,N個學生的成績整數用scanf 輸入,輸入的成績在[0,100]之間。排序完成後,輸入一個成績,要求用逐個比較查詢的方式找出該成績是該組中第幾個元素的值(即第幾名)。如果該成績不在陣列中,則輸出“no this score!”。 要求: 1、把排序演算法寫成函式形式,在主函式中輸入N個數據,然後呼叫排序函式排序。 2、在排序過程中儘量減少資料的交換和移動。 3、把查詢演算法寫成函式形式,在主函式中輸入1個數據,然後呼叫查詢函式查詢。

輸入共有三行:第一行是一個數N(N < 50),表示學生的人數; 第二行輸入N個學生的成績; 第三行輸入一個數m(你要查詢的成績)

Input

第一行輸出N個已經排好序的成績,每兩個成績之間有一個空格隔開,每10個數據換一行(由大到小排列)。 第二行輸出你要查詢的成績的名次(如果成績相同,則並列)。具體的見Sample Output。

Output
1 2 3 4 5 6 7 15 23 32 43 54 65 65 78 87 98 87 76 76 76 55 65 87 23 32 43 54 89 89 78 89 78 55 65 76 87 87 87 65 65 89 86 65 78 54 57 54 86
Sample Input
1 2 3 4 5 6 7 8 98 87 87 78 76 76 76 65 65 65 55 54 43 32 23 2 89 89 89 89 87 87 87 86 78 78 78 76 65 65 65 65 57 55 54 54 54 43 32 8


#include <stdio.h>
 
int main() {
    void sort(int a[],int N);
    int search(int a[],int N,int s);
    int N,i,a[50],m;
    scanf("%d",&N);
    for(i = 0;i < N;i++) {    //輸入N個人的成績
        scanf("%d",&a[i]);
    }
    scanf("%d",&m);
    sort(a,N);
    for(i = 0;i < N;i++) {
        if(i % 10 == 9) {
            printf(" %d\n",a[i]);
        } else if(i % 10 == 0 || i == 0){
            printf("%d",a[i]);
        } else {
            printf(" %d",a[i]);
        }
    }
    printf("\n");
    if(!search(a,N,m)) {
        printf("no this score!\n");
    } else {
        printf("%d\n",search(a,N,m));
    }
    return 0;
}
 
void sort(int a[],int N) {         //排序演算法
    int i,k,j,temp;
    for(i = 0;i < N -1;i++) {
        k = i;
        for(j = i +1;j < N;j++) {
            if(a[k] < a[j]) {
                k = j;      //交換下標號
            }
        }
        if(k != i) {
            temp = a[k];
            a[k] = a[i];
            a[i] = temp;
        }
    }
}
 
int search(int a[],int N,int s) {
    int i;
    for(i = 0;i < N;i++) {
        if(a[i] == s)
            return i+1;
    }
    return 0;
}