快速排序(无法传递结果)

时间:2017-04-24 03:29:19

标签: sorting

我在传递函数方面绝对是可怕的,对于传递数组更是如此。我的代码存在问题,我使用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;
    }
    }

2 个答案:

答案 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;
            }
        }
    }

您可以在其他代码中遵循此指南。

编辑:以下是您希望的代码片段。请注意,我已经插入了虚拟数据,

http://ideone.com/KAs1fG

将其合并到您的代码中。

答案 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);
}
}