Advertisement
Guest User

Untitled

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