30/09/2018, 18:22

Sắp xếp theo nhiều kiểu dữ liệu và nhiều thuật toán trong C?

Chào các bạn,mình đang có 1 bài tập sắp xếp trong C. Yêu cầu xắp xếp theo nhiều kiểu dữ liệu trong struct và dùng nhiều thuật toán sắp xếp.

Ví dụ ở đây mình có 1 struct là Test gồm 2 trường dữ liệu là string Name và int a.Và gồm các hàm có trong đoạn Code(Mình đang chỉ thử 1 thuật toán sắp xếp và mới chỉ sắp xếp theo 2 kiểu dữ liệu).Lúc chạy thì đc nhưng mình không biết như thề đã ổn chưa(Về thuật toán) mong mọi người có những ý kiến góp ý.

int SoSanh(Test t1,Test t2,int f)
{
    switch(f)
    {
    case 1:
        {
            if(t1.a > t2.a) return 1;
            else
                if(t1.a == t2.a) return 0;
            else return -1;break;
        }
    case 2:
        {
            int r = t1.name.compare(t2.name);
            if(r > 0) return 1;
            else{
            if(r == 0) return 0;
            else return -1;break;
                                }
        }
}
}
int SapXep(Test ds[],int n,int f1)
{
    for(int i = 0 ; i < n - 1 ; i++)
    {
        for(int j = i + 1 ; j < n ; j++)
        {
            switch(f1)
            {
            case 1:
                {
                    if(SoSanh(ds[i],ds[j],1) == 1)
                        DoiCho(ds[i],ds[j]);break;
                }
            case 2 :
                {
                    if(SoSanh(ds[i],ds[j],2) == 1)
                        DoiCho(ds[i],ds[j]);break;
                }
            }
        }
    }
}
void SapxepA(Test ds[],int n)
{
    SapXep(ds,n,1);
}
void SapxepName(Test ds[],int n)
{ 
    SapXep(ds,n,2);
}
Gió viết 20:28 ngày 30/09/2018

Trong C bạn có thể làm việc với con trỏ void*
Trong C++ bạn có thể làm việc với template

####C

void swap(void * a, void *b, int size){
       void * temp=malloc(size);
       // assert(temp);
       memcpy(temp,a,size);
       memcpy(a,b,size);
       memcpy(b,temp,size);
       free(temp);
}

typedef int(cmp_fn_t*)(void *a,void *b); // hàm so sánh tùy thuộc kiểu dữ liệu

####c++

template <class T>
void swap(T &a, T &b){
        T temp=a;
        a=b;
        b=temp;
}
Bài liên quan
0