Advertisement
ZOOOO

Untitled

Jan 27th, 2016
3,694
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.31 KB | None | 0 0
  1. //сортировка пузырьком
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5.  
  6. struct Elem {
  7. struct Elem *next;
  8. char *word;
  9. };
  10. typedef struct Elem Elem;
  11.  
  12. Elem *insertList(Elem *list, char *word) {
  13. Elem *new, *ret;
  14. new = calloc(1, sizeof(Elem));
  15. new->word = word;
  16. if (list == NULL) {
  17. ret = new;
  18. } else {
  19. ret = list;
  20. Elem *i = list;
  21. for (; i->next; i = i->next)
  22. ;
  23. i->next = new;
  24. }
  25. return ret;
  26. }
  27.  
  28. void swapList(Elem *l1, Elem *l2) {
  29. char *tmp = l1->word;
  30. l1->word = l2->word;
  31. l2->word = tmp;
  32. }
  33.  
  34. int cmp(Elem *a, Elem *b) {
  35. return strlen(b->word) - strlen(a->word);
  36. }
  37.  
  38. Elem *bsort(Elem *list) {
  39. int swapped;
  40. Elem *p1, *p2 = NULL;
  41. do {
  42. swapped = 0;
  43. p1 = list;
  44. while(p1->next != p2) {
  45. if(cmp(p1, p1->next) < 0) {
  46. swapList(p1, p1->next);
  47. swapped = 1;
  48. }
  49. p1 = p1->next;
  50. }
  51. p2 = p1;
  52. } while (swapped);
  53. return list;
  54. }
  55.  
  56. int main(int argc, char **argv) {
  57. char str[1024];
  58. fgets(str, 1024, stdin);
  59. Elem *list = NULL;
  60. char *tok = strtok(str, " ");
  61. while (tok) {
  62. list = insertList(list, tok);
  63. tok = strtok(NULL, " \n");
  64. }
  65. list = bsort(list);
  66. for (Elem *i = list; i; i = i->next)
  67. printf("%s ", i->word);
  68. Elem *i = list;
  69. while (i) {
  70. Elem *k = i;
  71. i = i->next;
  72. free(k);
  73. }
  74. return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement