Advertisement
elektryk798

sortowanie_zliczanie

Jun 22nd, 2017
338
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.34 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void zliczanie(int *tab,int n);
  5. int maks(int *tab,int n);
  6.  
  7. int main()
  8. {
  9. char znak='d';
  10. int *tab=NULL,n,i;
  11. while(znak!='q')
  12. {
  13. printf("Co chcesz zrobic?\nw - wyswietlenie tablicy\nm - maksimum tablicy\nt - tworzenie tablicy\ns - sortowanie przez zliczanie\nq - wyjscie z programu\n");
  14. fflush(stdin);
  15. scanf("%c",&znak);
  16. switch (znak)
  17. {
  18. case 't':
  19. fflush(stdin);
  20. scanf("%d",&n);
  21. tab=(int *)realloc(tab,sizeof(int)*n);
  22. for(i=0;i<n;i++)
  23. {
  24. fflush(stdin);
  25. scanf("%d",tab+i);
  26. }
  27. break;
  28. case 'w':
  29. for(i=0;i<n;i++)
  30. {
  31. printf("%d ",*(tab+i));
  32. }
  33. break;
  34. case 'm':
  35. printf("Maksimum: %d\n",maks(tab,n));
  36. case 's':
  37. zliczanie(tab,n);
  38. break;
  39. default:
  40.  
  41. break;
  42. }
  43. }
  44. return 0;
  45. }
  46.  
  47. int maks(int *tab,int n)
  48. {
  49. int i=0,max=tab[0];
  50. for (i=1;i<n;i++)
  51. if(tab[i]>max)
  52. max=tab[i];
  53. return max;
  54. }
  55. void zliczanie(int *tab,int n)
  56. {
  57. int k=maks(tab,n),i=0,*b=NULL,*c=NULL;
  58. b=(int *)realloc(b,n*sizeof(int));
  59. c=(int *)realloc(c,(k+1)*sizeof(int));
  60. for(i=0;i<=k;i++)
  61. c[i]=0;
  62. for (i=0;i<n;i++)
  63. c[tab[i]]=c[tab[i]]+1;
  64. for(i=1;i<=k;i++)
  65. c[i]+=c[i-1];
  66. for (i=0;i<n;i++)
  67. {
  68. b[c[tab[i]]-1]=tab[i];
  69. c[tab[i]]=c[tab[i]]-1;
  70. }
  71. for(i=0;i<n;i++)
  72. tab[i]=b[i];
  73. free(b);
  74. free(c);
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement