Quicksort 需要帮助来完成这个

Quicksort Need help to finish this

请帮帮我,我需要完成这个程序可以运行,但它不会按年龄排序,它应该根据年龄对记录进行排序,请帮忙。 我无法让它工作

这是我目前所做的。我不知道怎么了

#include <cstdlib>
#include <iostream>

using namespace std;

struct contact
{

    char lastname[30];
    char firstname[30];
    int age;
    int cnumber;
}
c[20];

void quickSort(int arr[], int left, int right) {
    int i = left, j = right;
    int tmp;
    int pivot = arr[(left + right) / 2];

    /* partition */
    while (i <= j) {
        while (arr[i] < pivot)
            i++;
        while (arr[j] > pivot)
            j--;
        if (i <= j) {
            tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
            i++;
            j--;
        }
    };

    /* recursion */
    if (left < j)
        quickSort(arr, left, j);
    if (i < right)
        quickSort(arr, i, right);
}
void addContact(int ctr)
{
    cout<<"ADD CONTACT"<<endl;
    cout<<"LAST NAME: "<<endl;
    cin>>c[ctr].lastname;
    cout<<"FIRST NAME: "<<endl;
    cin>>c[ctr].firstname;
    cout<<"AGE: "<<endl;
    cin>>c[ctr].age;
    while (c[ctr].age >= 100 || c[ctr].age <= 0)
    {
        cout<<"Input Age again: ";
        cin>>c[ctr].age;
    }
    cout<<"CONTACT NUMBER: "<<endl;
    cin>>c[ctr].cnumber;
    while (c[ctr].cnumber > 9999999 || c[ctr].cnumber < 1000000)
    {
        cout<<"Input Number Again: ";
        cin>>c[ctr].cnumber;
    }
    system("cls");
}
void display(int a)
{ cout<<"RECORDS"<<endl;
    for(int i=0;i<a;i++)
    {
        cout<<"\n";
        cout<<"LAST NAME: ";
        cout<<c[i].lastname<<endl;
        cout<<"FIRST NAME: ";
        cout<<c[i].firstname<<endl;
        cout<<"AGE: ";
        cout<<c[i].age<<endl;
        cout<<"CONTACT NUMBER: ";
        cout<<c[i].cnumber<<endl;
    }

}
int main(int argc, char *argv[])
{

    int choice, loop=0, tmp;
    while (choice!=4)
    {
        cout<<"\n";
        cout<<"CHOOSE"<<endl;
        cout<<"1.Add contacts: "<<endl;
        cout<<"2.Display "<<endl;
        cin>>choice;
        switch(choice)

        { case 1:
                addContact(loop);
                loop++;
                break;
            case 2:
                system("cls");
                display(loop);
                break;
            case 3:
                quickSort(&c[loop].age,loop,0);
                display(loop);
                break;
            default:
                cout<<"Invalid";
        }

    }


    return 0;
}

您的 quickSort 看起来是正确的,但它对 int 的数组进行了排序。你是这样称呼它的:

quickSort(&c[loop].age,loop,0);

指向结构数组的某个元素的 int 成员的指针 而不是 指向所有结构数组的该成员的数组开头的指针结构(不存在)。

你有选择;要么重写 quickSort 来比较 contacts,要么给 contact 一个比较器并使 quickSort 成为一个模板函数。

编辑:

重写 quickSort 以比较 contacts 非常简单:

void quickSort(contact arr[], int left, int right)
{
  int i = left, j = right;
  contact tmp;
  contact pivot = arr[(left + right) / 2];

  /* partition */
  while (i <= j) {
    while (arr[i].age < pivot.age)
      i++;
    while (arr[j].age > pivot.age)
      j--;
    if (i <= j) {
      tmp = arr[i];
      arr[i] = arr[j];
      arr[j] = tmp;
      i++;
      j--;
    }
  };

if (left < j)
  quickSort(arr, left, j);
if (i < right)
  quickSort(arr, i, right);
}

你所要做的就是确保 contact 有一个正确工作的赋值运算符,这样你就可以做像 arr[i] = arr[j]...

这样的事情