#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct info
{
char fname[20];
char adr[30];
char lname[20];
};
void input(info a[],int n)
{
for (int i = 0; i < n; i++)
{
printf("infomation of %d person :\n", i + 1);
printf("first name: "); fflush(stdin); //nhap ten
gets(a[i].fname);
printf("last name: ");//nhap ho,ten dem
gets(a[i].lname);
printf("address: "); fflush(stdin);
gets(a[i].adr);
}
}
void compare(info a[],int n)
{
int i,j;
char k,l;
for( i=0;i<n-1;i++)
{
for( j=i+1;j<n;j++)
if(strcmp(a[i].fname,a[j].fname)>=0)
{
if( strcmp(a[i].fname,a[j].fname)>0)
{
info k=a[i];
a[i]=a[j];
a[j]=k;
}
else
{
if(strcmp(a[i].lname,a[j].lname)>0)
{
info l=a[i];
a[i]=a[j];
a[j]=l;
}
}
}
}
}
void output(info a[],int n)
{
for(int i=0;i<n;i++)
{
printf("\n%s %s",a[i].lname,a[i].fname);
printf("\n%s",a[i].adr);
}
}
int main()
{
int n;
printf("numbers of people:");
scanf("%d",&n);
info a[100];
input(a,n);
compare(a,n);
output(a,n);
}
Nhập tên địa chỉ, sắp xếp tên theo alphabet, in ra danh sách tên+địa chỉ
int main()
{
int n; // chỗ này e chưa nhập n
info a[100];
input(a, n);
compare(a,n);
output(a,n);
getch();
}
ủa sao cuối mấy này lại có dấu “;” nhỉ?
Lâu rồi không động tới c nên quên mất rồi, nhìn lạ lạ
1 Like
hàm compare ổng đó viết thừa đó :)) với lại chưa tối ưu lắm
1 Like
Đây là hàm sắp xếp quickSort() của người ta làm.
Bạn thử tham khảo coi (Tôi chưa test)
Tôi đã đổi hàm compare(a,n); của bạn thành hàm quickSort(info a[],int left, int right)
quickSort()
void quickSort(info a[],int left, int right)
{
if (a == null || a.length <= 0){ //Không biết chỗ này có error không nữa
return;
}
if (left >= right) {
return;
}
int i = left, j = right;
int middle = left + (right - left)/2;
int pivot = a[middle];
while (i<=j) {
while (strcmp(a[i].lname, pivot.lname)<0) ++i;
while (strcmp(a[j].lname, pivot.lname)>0) --j;
if (i<=j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
++i;
--j;
}
}
if (left < j) quickSort(a, left, j);
if (i < right) quickSort(a, i, right);
}
Hàm main() gọi hàm quickSort(a, 0, n -1);
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?