Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //сортировка пузырьком
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
- struct Elem {
- struct Elem *next;
- char *word;
- };
- typedef struct Elem Elem;
- Elem *insertList(Elem *list, char *word) {
- Elem *new, *ret;
- new = calloc(1, sizeof(Elem));
- new->word = word;
- if (list == NULL) {
- ret = new;
- } else {
- ret = list;
- Elem *i = list;
- for (; i->next; i = i->next)
- ;
- i->next = new;
- }
- return ret;
- }
- void swapList(Elem *l1, Elem *l2) {
- char *tmp = l1->word;
- l1->word = l2->word;
- l2->word = tmp;
- }
- int cmp(Elem *a, Elem *b) {
- return strlen(b->word) - strlen(a->word);
- }
- Elem *bsort(Elem *list) {
- int swapped;
- Elem *p1, *p2 = NULL;
- do {
- swapped = 0;
- p1 = list;
- while(p1->next != p2) {
- if(cmp(p1, p1->next) < 0) {
- swapList(p1, p1->next);
- swapped = 1;
- }
- p1 = p1->next;
- }
- p2 = p1;
- } while (swapped);
- return list;
- }
- int main(int argc, char **argv) {
- char str[1024];
- fgets(str, 1024, stdin);
- Elem *list = NULL;
- char *tok = strtok(str, " ");
- while (tok) {
- list = insertList(list, tok);
- tok = strtok(NULL, " \n");
- }
- list = bsort(list);
- for (Elem *i = list; i; i = i->next)
- printf("%s ", i->word);
- Elem *i = list;
- while (i) {
- Elem *k = i;
- i = i->next;
- free(k);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement