注意觀念:
留言
- 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] - 程式碼中的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:
文章標籤
全站熱搜
留言列表