Advertisement
Guest User

LIST

a guest
Jan 24th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.23 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. typedef struct element{
  4. int key;
  5. struct element *next;
  6. } *list;
  7. list p = NULL, q;
  8. list to_one(list a, list b){
  9. if (a == NULL) return b;
  10. else {
  11. q = a;
  12. while (q -> next != NULL ) q = q -> next;
  13. q -> next = b;
  14. }
  15. return a;
  16. }
  17.  
  18. list qsort(list a){
  19. if (a == NULL)
  20. return a;
  21. list help1 = NULL, help2 = NULL, help3 = NULL, zachem_tak_zhit;
  22. q = a;
  23. int k = a-> key;
  24. while (q != NULL){
  25. zachem_tak_zhit = q -> next;
  26. if (q -> key < k){
  27. q -> next = help1;
  28. help1 = q;
  29. }
  30. else if (q -> key > k){
  31. q -> next = help2;
  32. help2 = q;
  33. }
  34. else {
  35. q -> next = help3;
  36. help3 = q;
  37. }
  38. q = zachem_tak_zhit;
  39. }
  40. help1 = qsort(help1);
  41. help2 = qsort(help2);
  42. help3 = to_one(help3, help2);
  43. help1 = to_one(help1, help3);
  44. return help1;
  45. }
  46.  
  47. list merge_sort(list a,int L, int R){
  48. if (a == NULL)
  49. return a;
  50. int M = (R + L) / 2;
  51. list help1 = NULL, help2 = NULL, q = a, help3 = NULL;
  52. for (int i = L; i <= M; ++i){
  53. q -> next = help1;
  54. help1 = q;
  55. }
  56. help1->next= NULL;
  57. for (int i = M + 1; i <= R; ++i){
  58. q -> next = help2;
  59. help2 = q;
  60. }
  61. help2->next = NULL;
  62. cout << M << endl;
  63. list zhozho = help3;
  64. help1 = merge_sort(help1, L, M);
  65. help2 = merge_sort(help2, M + 1, R);
  66. if (help1 -> key < help2->key){
  67. help3 = help1;
  68. help1 = help1 -> next;
  69. }
  70. else {
  71. help3 = help2;
  72. help2 = help2 -> next;
  73. }
  74. for (int i = L; i <= R; ++i){
  75. if (help1->next == NULL){
  76. help3 -> next = help2;
  77. break;
  78. }
  79. if (help2->next == NULL){
  80. help3 -> next = help1;
  81. break;
  82. }
  83. if (help1 -> key < help2->key){
  84. help3 -> next = help1;
  85. help1 = help3;
  86. }
  87. else {
  88. help3 -> next = help2;
  89. help2 = help3;
  90. }
  91. }
  92. return zhozho;
  93. }
  94. int main() {
  95. int n;
  96. cin >> n;
  97. for (int i = 0; i < n; ++i) {
  98. q = new element;
  99. cin >> q->key;
  100. q->next = p;
  101. p = q;
  102. }
  103. p = merge_sort(p,0,n-1);
  104. q = p;
  105. while (q != NULL) {
  106. cout << q->key << ' ';
  107. q = q->next;
  108. }
  109. return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement