注意觀念:

 
 留言
  1. quickSort(grade, 0, count-1);
    grade是array名,0是array下界,count-1是array上界。
    注意: 勿寫成quickSort(grade, 0, count);
    因為array是grade[0]到grade[count-1],而不是grade[0]到grade[count]
  2. 程式碼中的quick sort來自[2], 請把quick sort背起來

AC程式碼:

#include<stdio.h>
#include<stdlib.h>
#define SWAP(x,y) {int t; t = x; x = y; y = t;} 

void quickSort(int grade[], int left, int right) { 
    if(left < right) { 
        int s = grade[(left+right)/2]; 
        int i = left - 1; 
        int j = right + 1; 

        while(1) { 
            while(grade[++i] < s) ;  // 向右找 
            while(grade[--j] > s) ;  // 向左找 
            if(i >= j) 
                break; 
            SWAP(grade[i], grade[j]); 
        } 

        quickSort(grade, left, i-1);   // 對左邊進行遞迴 
        quickSort(grade, j+1, right);  // 對右邊進行遞迴 
    } 
} 

int main(){
	int count=0,grade[20]={0},i=0,max=-1,min=101;
	while(scanf("%d",&count)==1){
		max=-1;
		min=101;
		for(i=0;i<count;i++){
			scanf("%d",&grade[i]);
		}
		quickSort(grade, 0, count-1);
		for(i=0;i<count;i++){
			printf("%d ",grade[i]);
			if(grade[i]<60){//找最高不及格分數 
				if(grade[i]>max) max=grade[i];
			}
			if(grade[i]>59){//找最低及格分數 
				if(grade[i]<min) min=grade[i];
			}
		}
		printf("\n");
		if(max==-1) printf("best case\n");
		else printf("%d\n",max);
		if(min==101) printf("worst case\n");
		else printf("%d\n",min);
		for(i=0;i<count;i++){
			grade[i]=0;
		}
	}
	return 0;
} 

Reference:

[1] 題目來源:高中生程式解題系統
[2] 快速排序(二)

arrow
arrow
    創作者介紹
    創作者 檸檬 的頭像
    檸檬

    檸檬的C語言初學日誌

    檸檬 發表在 痞客邦 留言(0) 人氣()