• Data Structure Linked List: Merge Sort for Linked Lists


    http://www.geeksforgeeks.org/merge-sort-for-linked-list/

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 #include <queue>
     5 #include <stack>
     6 #include <string>
     7 #include <fstream>
     8 #include <map>
     9 #include <set>
    10 using namespace std;
    11 
    12 struct node {
    13     int data;
    14     node *next;
    15     node() : data(0), next(NULL) { }
    16     node(int d) : data(d), next(NULL) { }
    17 };
    18 
    19 void push(node* &head, int k) {
    20     node *new_node = new node(k);
    21     new_node->next = head;
    22     head = new_node;
    23 }
    24 
    25 void print(node* head) {
    26     if (!head) return;
    27     cout << head->data << " ";
    28     print(head->next);
    29 }
    30 
    31 void frontbacksplit(node *head, node *&a, node *&b) {
    32     node *p, *q;
    33     if (!head || !head->next) {
    34         a = head;
    35         b = NULL;
    36         return;
    37     }
    38     p = head;
    39     q = head->next;
    40     while (q) {
    41         q = q->next;
    42         if (q) {
    43             q = q->next;
    44             p = p->next;
    45         }
    46     }
    47     a = head;
    48     b = p->next;
    49     p->next = NULL;
    50 }
    51 
    52 node *sortmerge(node *a, node *b) {
    53     node *ans = NULL;
    54     if (!a) return b;
    55     if (!b) return a;
    56     if (a->data < b->data) {
    57         ans = a;
    58         ans->next = sortmerge(a->next, b);
    59     }
    60     else {
    61         ans = b;
    62         ans->next = sortmerge(a, b->next);
    63     }
    64     return ans;
    65 }
    66 
    67 void mergesort(node *&head) {
    68     if (!head || !head->next) return;
    69     node *a, *b;
    70     node *h = head;
    71     frontbacksplit(h, a, b);
    72     mergesort(a);
    73     mergesort(b);
    74     head = sortmerge(a, b);
    75 }
    76 
    77 int main() {
    78     node *head = NULL;
    79     push(head, 15);
    80     push(head, 10);
    81     push(head, 5);
    82     push(head, 20);
    83     push(head, 3);
    84     push(head, 2);
    85     mergesort(head);
    86     print(head);
    87     return 0;
    88 }
  • 相关阅读:
    十个男人看了,九个成了富人
    win7下编译安装osgearth
    gdal源码编译安装
    win7下编译boost库总结
    everything && executor
    cursor:hand与cursor:pointer的区别介绍
    web程序记录当前在线人数
    汉字转拼音
    40多个非常有用的Oracle 查询语句
    asp.net 使用IHttpModule 做权限检查 登录超时检查(转)
  • 原文地址:https://www.cnblogs.com/yingzhongwen/p/3656213.html
Copyright © 2020-2023  润新知