Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 快速排序需要帮助才能完成此操作_C++_Recursion_Quicksort - Fatal编程技术网

C++ 快速排序需要帮助才能完成此操作

C++ 快速排序需要帮助才能完成此操作,c++,recursion,quicksort,C++,Recursion,Quicksort,请帮助我,我需要完成这个程序的工作,但它不会排序的年龄,它应该排序的记录根据年龄请帮助。 我不能让它工作 这就是我到目前为止所做的。我想不出是怎么回事 #include <cstdlib> #include <iostream> using namespace std; struct contact { char lastname[30]; char firstname[30]; int age; int cnumber; } c[2

请帮助我,我需要完成这个程序的工作,但它不会排序的年龄,它应该排序的记录根据年龄请帮助。 我不能让它工作

这就是我到目前为止所做的。我想不出是怎么回事

#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;
}
#包括
#包括
使用名称空间std;
结构接触
{
char lastname[30];
charfirstname[30];
智力年龄;
国际编号;
}
c[20];
无效快速排序(int-arr[],int-left,int-right){
int i=左,j=右;
int tmp;
int pivot=arr[(左+右)/2];
/*分割*/
而(我)
j--;

如果(i您的
快速排序
看起来正确,但它对
int
数组进行排序。您这样称呼它:

quickSort(&c[loop].age,loop,0);
指向结构数组中某个元素的
int
成员的指针不是指向所有结构(不存在)中该成员的数组开头的指针

您可以选择:要么重写
快速排序
以比较
联系人
,要么给
联系人
一个比较器,使
快速排序
成为一个模板函数

编辑:

重写
快速排序
以比较
联系人
非常简单:

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);
}
void快速排序(联系arr[],左整数,右整数)
{
int i=左,j=右;
联系tmp;
接触轴=arr[(左+右)/2];
/*分割*/
而(我的年龄)
j--;

如果(i您的
快速排序
看起来正确,但它对
int
数组进行排序。您这样称呼它:

quickSort(&c[loop].age,loop,0);
指向结构数组中某个元素的
int
成员的指针不是指向所有结构(不存在)中该成员的数组开头的指针

您可以选择:要么重写
快速排序
以比较
联系人
,要么给
联系人
一个比较器,使
快速排序
成为一个模板函数

编辑:

重写
快速排序
以比较
联系人
非常简单:

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);
}
void快速排序(联系arr[],左整数,右整数)
{
int i=左,j=右;
联系tmp;
接触轴=arr[(左+右)/2];
/*分割*/
而(我的年龄)
j--;

如果(我知道你有一个可以处理
int
?这不应该:
while(c[ctr].cnumber>9999999 | c[ctr].cnumber<1000000)
be
while(c[ctr].cnumber>999999&&c[ctr].cnumber<1000000)
?快速排序(&c[loop].age,loop,0)这里有几个错误1-您试图将单个年龄解释为年龄数组2我怀疑循环,0应该以不同的方式传递order@Alexander我该怎么办请帮我我自己也弄不明白我该怎么改请我是新手你的代码真的有效吗?你有可以处理的快速排序吗
int
?这不应该是:
while(c[ctr].cnumber>9999999 | c[ctr].cnumber<1000000)
be
while(c[ctr].cnumber>999999&&c[ctr].cnumber<1000000)
?快速排序(&c[loop]。年龄,循环,0)这里有几个错误1-您试图将单个年龄解释为年龄数组2我怀疑循环,0应该以不同的方式传递order@Alexander我该怎么做请帮我我自己弄不明白我该怎么改请我是新手你的代码真的有效吗?我该怎么做?我弄不明白哈哈拜托听我说。我将如何重写我的快速排序以比较联系人。该函数是错误的
快速排序(&c[loop]。年龄,循环,0)
,它应该是
快速排序(数组,0,循环-1);
它说不能将int转换为contact,因为参数1是无效的快速排序(contact*,int,int)我不明白它现在在工作非常感谢你我无法投票你的答案说我需要15个声誉,然后再次感谢。我将如何做?我不能得到它哈哈,请容忍我。我将如何重写我的快速排序来比较联系人。功能错误
快速排序(&c[loop]。年龄,循环,0)
,应该是
快速排序(数组,0,循环-1);
上面写着无法将参数1的int转换为contact以取消快速排序(contact*,int,int)我不明白它现在正在工作,非常感谢你,我无法投票表决你的答案,上面写着我需要15个声望,然后再次感谢。