经过昨天那道题,今天这道就很简单了,就算不知道哪种顺序最佳,看给出的实例就能看从小到大排序,而且最后计算平均等待时间的时候也就明白为啥这样排最省时了。
看题解提供一种思路:换一种存数据的方式
struct wt{
int o;
int t;
}a[1001];
bool cmp(wt x,wt y) {
return x.t<y.t;
}
int main() {
int n;
double s=0;
cin>>n;
for (int i=0;i<n;i++) {
cin>>a[i].t;
a[i].o=i+1;
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++) {
cout<<a[i].o<<' ';
if(i<n-1) s+=a[i].t*(n-i-1);
}
cout<<endl;
cout<<fixed<<setprecision(2)<<s/n;
return 0;
}
//选择排序回顾
for(int i=0;i<n-1;i++) {
int min=i;
for(int j=i+1;j<n;j++)
if(t[j]<t[min]) min=j;
swap(t[i],t[min]);
}
//
int main() {
int n,t[1001];
double s=0;
cin>>n;
for(int i=0;i<n;i++) {cin>>t[i];t[i]=t[i]*1001+i+1;}
sort(t,t+n);
for(int i=0;i<n;i++) {
cout<<t[i]%1001<<' ';
if(i<n-1) s+=t[i]/1001*(n-i-1);
}
cout<<endl;
cout<<fixed<<setprecision(2)<<s/n;
return 0;
}