CTDL & GT - sort

#include <stdio.h>

#include <stdlib.h>

typedef struct data

{

        int ma;

        char ht[10];

        } data;

void doicho(int *a,int *b)

{

     int tg;

     tg = *a;

     *a=*b;

     *b=tg;

     }

void selection_sort (int a[],int n)

{

     int temp ,i,j;

     for(i=0;i<n-1;i++)

     {

                   temp=i;

                   for(j=i+1;j<n;j++)  

                                       if (a[j]<a[temp]) temp =j;

                   if (temp!=i) doicho(&a[i],&a[temp]);

                     }

     }

void insertion_sort(int a[],int n)

{

     int pos,i,temp;

     for(i=1;i<n;i++)

                     {

                                temp=a[i];

                                pos = i-1;

                                while ((pos>=0)&& (a[pos]>temp))

                                      {

                                                  a[pos+1] =a[pos];

                                                  pos--;

                                                  }

                                      a[pos+1]=temp;

                                }

     }

void bubblesort (int a[],int n)

{

     int i,j;

     for(i=0;i<n-1;i++)

                     for(j=n-1;j>i;j--)

                     if (a[j]<a[j-1]) doicho (&a[j],&a[j-1]);

     }

void   ShellSort (int a[], int N, int h[], int k)

{int step,i,j;

int x,len;

for (step=0;step<k;step++)

{len=h[step];

for (i=len;i<N; i++)

{x=a[i];

j=i-len;

while ((x<a[j])&&(j>-1))

{a[j+len]=a[j];

j=j-len;

}

a[j+len]=x;

}

}

}

void QuickSort (int a[], int l, int r)

{int i,j,x;

x=a[(l+r)/2];

i=l;  j=r;

do

{while (a[i]<x)i++;

while (a[j]>x)j--;

if (i<=j)

{doicho(&a[i],&a[j]);

i++;

j--;

}

} while (i<j);

if (l<j)    QuickSort(a,l,j);

if (i<r)    QuickSort(a,i,r);

}

void Shift(int a [ ],int l, int r)

{int  x, i, j, cont;

i = l; j = 2*i+1;

    cont =1;  

x = a[i ];

while ((j<=r) and (cont))

{if (j <r)                      

    if (a[j]>a[j+1])    

j=j+1;

if (a[j]>x)

cont = 0;

else

{doicho(&a[i],&a[j]);

i = j;             

j=2*i+1;

      }

      }

}

void  CreateHeap(int a[ ],int N)

{

int   i;

i = N/2;

while (i > 0)

{i--;

Shift(a,i,N-1);

}

}

void  Heapsort(int a[],int N)

{

int   r;

r = N-1;

while (r > 0)

{

doicho(&a[0],&a[r]);

r--;

Shift(a,0,r);

}

}

void input (data *a)

{

     char temp[5];

     fflush(stdin);

     printf("

Nhap Ma: "); gets(temp); a->ma=atoi(temp); 

     fflush(stdin);

     printf("

Nhap ho te: "); gets(a->ht);

     }

void output(data a)

{

     printf("

Ma: %3d \t HoTen: %10s ",a.ma,a.ht);

     }

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

{

    int a[]={7,4,3,6,8,5,9,1,2};

    int h[]={5,1,3};

    //ShellSort(a,9,h,3);

    //QuickSort(a,0,9);

    //insertion_sort(a,9);

    //selection_sort(a,9)

    /*CreateHeap(a,9);

    Heapsort(a,9);*/

    data *b;

    b=(data*)malloc(5*sizeof(data));

    int i;

    for(i=0;i<5;i++)

    {

           input(&b[i]);         

                    }

    //for(int i=0;i<9;i++)

    //printf("%2d",a[i]);

    for(i=0;i<5;i++)

    output(b[i]);

    printf("

");

    system("PAUSE");

    return 0;

}

Bạn đang đọc truyện trên: AzTruyen.Top

Tags: