zoukankan      html  css  js  c++  java
  • 链表的归并排序

    #include <algorithm>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    
    using namespace std;
    
    typedef struct LNode* LinkList;
    struct LNode {
        int data;
        LinkList next;
        LNode(int x = 0) { data = x, next = NULL; }
    };
    
    LinkList creatList(int n) {
        LinkList head = new LNode(n);
        LinkList p, tail = head;
        for (int i = 0; i < n; i++) {
            p = new LNode();
            cin >> p->data;
            tail->next = p;
            tail = p;
        }
        return head;
    }
    
    void unionList(LinkList head, LinkList head1, LinkList head2) {
        LinkList p = head1->next, q = head2->next, tail = head;
        int cnt1 = 0, cnt2 = 0;
        while (cnt1 < head1->data && cnt2 < head2->data) {
            if (p->data > q->data) {
                tail->next = q;
                tail = q;
                q = q->next;
                cnt2++;
            } else {
                tail->next = p;
                tail = p;
                p = p->next;
                cnt1++;
            }
        }
        if (cnt1 < head1->data) tail->next = p;
        if (cnt2 < head2->data) tail->next = q;
    }
    
    void sortList(LinkList head) {
        if (head->data <= 1) return;
        LinkList head1 = new LNode(head->data >> 1);
        LinkList head2 = new LNode(head->data - head1->data);
        head1->next = head->next;
        head2->next = head->next;
        for (int i = 0; i < head1->data; i++) head2->next = head2->next->next;
        sortList(head1);
        sortList(head2);
        unionList(head, head1, head2);
        delete (head1);
        delete (head2);
    }
    
    void printList(LinkList head) {
        LinkList p = head->next;
        int cnt = 1;
        while (cnt <= head->data) {
            cout << p->data;
            if (cnt < head->data)
                cout << ' ';
            else
                cout << '
    ';
            p = p->next;
            cnt++;
        }
    }
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(), cout.tie();
        int n;
        cin >> n;
        LinkList head = creatList(n);
        sortList(head);
        printList(head);
        return 0;
    }
    
  • 相关阅读:
    细节回顾 p标签的嵌套问题
    面向对象编程
    深浅拷贝
    数据交互 jsonp插件
    数据交互 跨域问题
    数据交互 axios
    数据交互 jQuery ajax
    数据交互 后端代码
    数据交互 http请求 xhr
    Windows安装Node.js报错:2503、2502的解决方法
  • 原文地址:https://www.cnblogs.com/sdutzxr/p/13760653.html
Copyright © 2011-2022 走看看