Advertisement
bkit4s0

[counting sort] bản hoàn chỉnh

Dec 22nd, 2014
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.12 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define MAX 10000
  4. #define in "in.txt"
  5. #define out "out.txt"
  6. int findmax(int a[], int n)
  7. {
  8.     int max = a[0];
  9.     for (int i = 1; i < n; ++i)
  10.     {
  11.         if(a[i]>max)
  12.             max = a[i];
  13.     }
  14.     return max;
  15. }
  16. void print_array(int a[],int n)
  17. {
  18.        for ( int i = 0; i < n; i++ )
  19.                         printf( "%d ",a[i]);
  20.            printf( "\n");
  21. }
  22. void insertionsort(int a[], int n)
  23. {
  24.         int i,j,key;
  25.         for (int j = 1; j < n; ++j)
  26.         {
  27.                 key = a[j];
  28.                 i = j -1;
  29.                 while(i>=0&&a[i]>key)
  30.                 {
  31.                         a[i+1] = a[i];
  32.                         i = i-1;
  33.                 }
  34.                 a[i+1] = key;
  35.         }
  36. }
  37. void countingsort(int a[],int b[], int k)
  38. {
  39.     //int c[MAX];
  40.     int *c;
  41.     c = (int*)malloc(MAX);
  42.     for (int i = 0; i < k; ++i)
  43.     {
  44.         c[i] =0;
  45.     }
  46.     for (int i = 0; i < MAX; ++i)
  47.     {
  48.         c[a[i]] = c[a[i]] + 1;
  49.     }
  50.     for (int i = 1; i < k; ++i)
  51.     {
  52.         c[i]= c[i] + c[i-1];
  53.     }
  54.     for (int i = MAX-1; i >= 0; --i)
  55.     {
  56.         b[c[a[i]]-1] = a[i];
  57.         c[a[i]] = c[a[i]] -1;
  58.         //print_array(a,11);
  59.         //print_array(b,11);
  60.     }
  61.     free(c);
  62. }
  63. void GhiFileSoNguyen(int n)
  64. {
  65.     FILE *f;
  66.     f = fopen(in,"wt");
  67.     if(f==NULL)
  68.     {
  69.         printf("Khong tao duoc file\n");
  70.         //getch();
  71.         exit(0);
  72.     }
  73.     for (int i = 0; i < n; ++i)
  74.     {
  75.         fprintf(f, "%d\n", rand()%1000);
  76.     }
  77.     fclose(f);
  78. }
  79. void GhiFile(int a[MAX], int n)
  80. {
  81.     FILE *f;
  82.     f = fopen(out,"wt");
  83.     if(f==NULL)
  84.     {
  85.         printf("Khong tao duoc file\n");
  86.         //getch();
  87.         exit(0);
  88.     }
  89.     for (int i = 0; i < n; ++i)
  90.     {
  91.         fprintf(f, "%d\n", a[i]);  
  92.     }
  93.     fprintf(f, "\n" );
  94.     fclose(f);
  95. }
  96. void DocFile(int a[MAX], int n)
  97. {
  98.     FILE *f;
  99.     f = fopen(in,"rt");
  100.     if(f==NULL)
  101.     {
  102.         printf("Khong doc duoc file\n");
  103.         //getch();
  104.         exit(0);
  105.     }
  106.     for (int i = 0; i < n; ++i)
  107.     {
  108.         fscanf(f, "%d", &a[i]);
  109.     }
  110.     fclose(f);
  111. }
  112. int main(int argc, char const *argv[])
  113. {
  114.     int a[MAX];
  115.     int b[MAX];
  116.     GhiFileSoNguyen(MAX);
  117.     DocFile(a,MAX);
  118.     countingsort(a,b,findmax(a,MAX)+1);
  119.     GhiFile(b,MAX);
  120.     /*for(int i=0; i<MAX; i++)
  121.         printf("%d\n",a[i]);*/
  122.     system("pause");
  123.     return 0;
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement