Advertisement
Guest User

Untitled

a guest
Sep 5th, 2015
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.04 KB | None | 0 0
  1. struct list{
  2. int data;
  3. struct list *next;
  4. };
  5.  
  6. struct list * insert(struct list *node, int data){
  7. struct list *tmp = (struct list*)malloc(sizeof(struct list));
  8.  
  9. if (tmp != NULL){
  10. tmp->data = data;
  11. if (node != NULL){
  12. tmp->next = node->next;
  13. node->next = tmp;
  14. }else{
  15. tmp->next = NULL;
  16. }
  17. }
  18.  
  19. return tmp;
  20. }
  21.  
  22. struct list * sort(struct list *root){
  23. struct list *new_root = NULL;
  24.  
  25. while (root != NULL){
  26. struct list *node = root;
  27. root = root->next;
  28.  
  29. if (new_root == NULL || node->data < new_root->data){
  30. node->next = new_root;
  31. new_root = node;
  32. }else{
  33. struct list *current = new_root;
  34. while (current->next != NULL && !(node->data < current->next->data)){
  35. current = current->next;
  36. }
  37.  
  38. node->next = current->next;
  39. current->next = node;
  40. }
  41. }
  42.  
  43. return new_root;
  44. }
  45.  
  46. void Sort(double a[], int n){
  47. if(a == NULL) return;
  48. int i, j;
  49. list **buckets = (list **)malloc(n*sizeof(list *)); /*Массив списков, сейчас содержит мусор*/
  50. memset(buckets, 0, n*sizeof(list *)); /*Проинициализируем его*/
  51.  
  52. /*Вставить элемент a[i] в список buckets[floor(n*a[i])]*/
  53. for(i = 0; i < n; i++)
  54. insert(buckets[(int)floor(n*a[i])], a[i]);
  55. /*Сортировка всех списков*/
  56. for(i = 0; i < n; i++)
  57. buckets[i] = sort(buckets[i]);
  58. /*Слияние всех списков в один*/
  59. j = 0;
  60. /*Цикл по всем спискам*/
  61. list *p;
  62. for(i = 0; i < n ; i++){
  63. printf("end loopn");
  64. putchar('n');
  65. if(buckets[i] != NULL){
  66. p = buckets[i];
  67. while(p != NULL){
  68. printf("bucket[%d]: data %dn", i, p->data);
  69. a[j++] = p->data;
  70. p = p->next;
  71. }
  72. }else printf("bucket[%d] is emptyn", i);
  73. }
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement