我在传递函数方面绝对是可怕的,对于传递数组更是如此。我的代码存在问题,我使用Quick Sort从外部文件中对数据进行排序。函数无法传递排序结果。
更新:函数可以通过排序但是,从小到大排序,我想从大到小排序,怎么做?
但是,如果我使用简单的排序喜欢
int temp_score;
string temp_name;
for(int j=0;j<100;j++)
{
for(int k=0;k<100;k++)
{
if(score[j]>score[k])
{
temp_score=score[j];
score[j]=score[k];
score[k]=temp_score;
temp_name=name[j];
name[j]=name[k];
name[k]=temp_name;
}
}
}
简单排序没问题。
void quicksort(int score[],string name[],int kiri,int kanan){
int temp_score=0,i=kiri,j=kanan;
int pivot = score[(kiri+kanan)/2];
string temp_name;
//Pengurutan data berdasar Pivot
while (i <= j){
while (score[i]<pivot){
i++;
}while (score[j]>pivot){
j--;
}if (i <= j){
temp_score=score[i];
score[i]=score[j];
score[j]=temp_score;
temp_name=name[i];
name[i]=name[j];
name[j]=temp_name;
i++;
j--;
}
}
//Rekursif
if (kiri<j){
quicksort(score,name,kiri,j);
}if (i<kanan){
quicksort(score,name,i,kanan);
}
}
int main (){
string name[100];
int score[100];
int i=0;
for (int i=0;i<100;i++)
{
name[i]="";
score[i]=0;
}
ifstream highscore;
highscore.open("highscore.txt");
while(!highscore.eof())
{
getline(highscore,name[i]);
highscore >> score[i];
highscore.ignore(100,'\n');
i++;
}
quicksort(score,name,0,99);
cout<<"\tNAMA\t\t|\t\tSCORE\t\t"<<endl;
cout<<"========================================================"<<endl;
for(int m=0;m<25;m++)
{
cout<<name[m]<<"\t\t\t\t"<<"Rp "<<score[m]<<endl;
}
}
答案 0 :(得分:0)
要按降序排序,通常会替换'&lt;'使用'&gt;',i--使用i ++,限制是相反的 - 我的意思是作为一般指导,而不是在任何地方盲目地取代。例如:
int temp_score;
string temp_name;
for(int j=0;j<100;j++)
{
for(int k=0;k<100;k++)
{
if(score[j]<score[k])
{
temp_score=score[j];
score[j]=score[k];
score[k]=temp_score;
temp_name=name[j];
name[j]=name[k];
name[k]=temp_name;
}
}
}
您可以在其他代码中遵循此指南。
编辑:以下是您希望的代码片段。请注意,我已经插入了虚拟数据,
将其合并到您的代码中。
答案 1 :(得分:0)
如何按降序排序?我很困惑
void quicksort(int score[],string name[],int kiri,int kanan){
int temp_score=0,i=kiri,j=kanan;
int pivot = score[(kiri+kanan)/2];
string temp_name;
//Pengurutan data berdasar Pivot
while (i <= j){
while (score[i]<pivot){
i++;
}while (score[j]>pivot){
j--;
}if (i <= j){
temp_score=score[i];
score[i]=score[j];
score[j]=temp_score;
temp_name=name[i];
name[i]=name[j];
name[j]=temp_name;
i++;
j--;
}
}
//Rekursif
if (kiri<j){
quicksort(score,name,kiri,j);
}if (i<kanan){
quicksort(score,name,i,kanan);
}
}