Advertisement
Guest User

Untitled

a guest
Nov 27th, 2015
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <math.h>
  6.  
  7. #define MDN 254 // maks. dlugosc napisu
  8. #define MN 20000 // maks il napisow
  9.  
  10. char **A,**B,**C;
  11. int OP;
  12.  
  13. int countsort(char **A, int n ,int k)
  14. {
  15. int i, j, x;
  16.  
  17. int C[MDN];
  18.  
  19. for (i = 0; i <= k; i++)
  20. C[i] = 0;
  21.  
  22. for (j = 0; j < n; j++){
  23. C[*(A[j]+x)] += 1;
  24. // teraz C[i] == iloœæ wartoœci równych "i" w tablicy A
  25.  
  26. }
  27. for (i = 1; i <= k; i++)
  28. C[i] += C[i-1];
  29. // teraz C[i] == iloœæ wartoœci mniejszych lub równych "i" w A
  30.  
  31.  
  32. for (j = 0; j < n; j++)
  33. {
  34. B[C[*(A[j]+x)]-1] = A[j];
  35. C[*(A[j]+x)] -= 1;
  36. }
  37.  
  38. if (x == 0) {
  39. for (i = 0; i < n; i++)
  40. A[i] = B[i];
  41.  
  42. }
  43. else {
  44. for (i = 0; i < n; i++)
  45. A[n-1-i] = B[i];
  46.  
  47. }
  48.  
  49. }
  50.  
  51.  
  52. int radixsort(char **A, int n){
  53.  
  54. int i, j, x;
  55.  
  56. int C[MDN];
  57.  
  58. for (x = OP - 1; x >= 0; x--){
  59.  
  60. countsort(A,n,MDN);
  61.  
  62.  
  63. }
  64. return 0;
  65. }
  66.  
  67.  
  68.  
  69. void drukuj(char **A,int n){
  70. int i;
  71. for (i=0;i<n;i++){
  72. printf("%c %s",*(A[i]+1),A[i]);
  73. printf("\n");
  74. }
  75. }
  76.  
  77. void czytaj(char **A, int ilosc){
  78. char slowo[MDN];
  79. int i=0;
  80. int j=0;
  81. for (i=0;i<ilosc; i++){
  82. scanf("%s",slowo);
  83. A[i] = (char*) malloc(sizeof(char)*MDN);
  84. strcpy(A[i],slowo);
  85. }
  86. }
  87.  
  88. void readfile(char **A, int ilosc){
  89. FILE *fp;
  90. fp = fopen("nazwiska.txt", "r");
  91. OP = 0;
  92.  
  93. char slowo[MDN];
  94. int liczba;
  95. int i=0, j=0;
  96. for (i=0;i<ilosc; i++){
  97. fscanf(fp, "%i %s", &liczba, slowo);
  98. A[i] = (char*) malloc(sizeof(char)*MDN);
  99. if (OP < strlen(slowo)) OP = strlen(slowo);
  100. strcpy(A[i],slowo);
  101. for (j = strlen(slowo); j < MDN-1; j++) A[i][j] = 0;
  102. }
  103. fclose(fp);
  104. }
  105.  
  106. void savefile(char **A, int n, char *nazwa_pliku)
  107. {
  108. FILE *fp;
  109. fp = fopen(nazwa_pliku, "w+");
  110. int i;
  111.  
  112. for (i = 0; i < n; i++)
  113. fprintf(fp, "%s\n", A[i]);
  114.  
  115. fclose(fp);
  116. }
  117.  
  118.  
  119. main(){
  120. int n=MN;
  121.  
  122. A=(char**) malloc(n*sizeof(char*));
  123. B=(char**) malloc(n*sizeof(char*));
  124.  
  125. readfile(A,n);
  126. radixsort(A,n);
  127. savefile(A,n,"wynik.txt");
  128.  
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement