1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
#include <stdlib.h> #include <time.h> #define MAXN 100
typedef struct { int val; struct * next; } node;
node *createNode() { node *ret = (node*)malloc(sizeof(node)); ret->val = 0; ret->next = NULL; return ret; }
node *createList(int n) { srand(time(0)); node *head = createNode(); for(int i = 0; i < n; ++i) { node *p = createNode(); p->val = rand()%100; p->next = head->next; head->next = p; } return head; }
node* mergeSort(node *p) { if(p == NULL) return p; if(p->next == NULL) return p; node *fst = p; node *sed = p->next; while(sed->next) { fst = fst->next; sed = sed->next; if(sed->next == NULL) break; sed = sed->next;
} sed = fst->next; fst->next = NULL; fst = p; fst = mergeSort(fst); sed = mergeSort(sed); p = NULL; node *ret = NULL; while(fst && sed) { if(fst->val < sed->val) { if(p == NULL) ret = p = fst; else { p->next = fst; p = p->next; } fst = fst->next; } else { if(p == NULL) ret = p = sed; else { p->next = sed; p = p->next; } sed = sed->next; } } while(fst) { p->next = fst; fst = fst->next; } while(sed) { p->next = sed; sed = sed->next; } return ret; }
int main() { int n = 10; node *head = createList(n); node *p = head->next; while(p) { printf("%dn",p->val); p = p->next; } p = head->next; free(head); head = mergeSort(p); puts("----------------------------"); while(head) { printf("%dn",head->val); head = head->next; } return 0; }
|
近期评论