需要帮助来完成这个
Quicksort Need help to finish this
本文关键字:帮助 更新时间:2023-10-16
请帮助我,我需要完成这个程序工作,但它不会按年龄排序,它应该根据年龄排序的记录,请帮助。我不能让它工作
这是我目前所做的。我不知道出了什么问题
#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]
…
相关文章:
- 需要帮助设置在C++中使用的Potrace
- 在指针的帮助下,文本文件中单词的频率
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 如何在Qbutton的帮助下更改Q对话框的宽度
- 需要帮助将结构数组传递给函数
- C++需要帮助从用户那里获得一个整数,并确保它在另外两个整数之间
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 有人可以帮助我处理正则表达式吗?
- C++调用具有 *this 属性的单个帮助程序函数
- C++:需要帮助了解运算符重载错误
- 需要以下代码的帮助,下面的代码有什么问题
- CS1 项目帮助C++
- 用于检查值是否为其任何参数的帮助程序函数
- 需要有关此 if 语句的帮助
- 类型限定宏帮助程序
- CoreCLR 中的检测探查器 - 将帮助程序程序集加载到 dotnet 进程的方法
- NS3 插槽混淆(需要帮助理解)
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- 需要帮助查找内存泄漏
- 有人可以帮助我理解这些参数/参数吗?