zoukankan      html  css  js  c++  java
  • 请给出一个时间为O(nlgk)、用来将k个已排序链表的算法。此处n为所有输入链表中元素的总数。

    代码:

    #include "iostream"
    #define null 0
    using namespace std;
    
    typedef struct node{
        int data;
        struct node *next;
    }Link;
    
    int heap_size=3;
    
    Link* createLink(){
        int data;
        Link *t,*h=null,*p;
        cin>>data;
        int i=0;
        while(data!=0){
            p=(Link*)malloc(sizeof(Link));
            p->data=data;
            p->next=null;
            i++;
            if(i==1)
                h=t=p;
            else {
                t->next=p;
                t=t->next;
            }
            cin>>data;
        }
        return h;
    }
    
    int left(int i){
        return 2*i;
    }
    
    int right(int i){
        return 2*i+1;
    }
    
    void min_Heapify(Link* A[],int i){
        int l,r;
        l=left(i);
        r=right(i);
        int smallest;
        if(l<=heap_size&&A[i]->data>A[l]->data)
            smallest=l;
        else 
            smallest=i;
        if(r<=heap_size&&A[smallest]->data>A[r]->data)
            smallest=r;
        if(smallest!=i){
            Link *temp;
            temp=A[i];
            A[i]=A[smallest];
            A[smallest]=temp;
            min_Heapify(A,smallest);
        }
    }
    
    Link *extract_MinHeap(Link*A[]){
        Link* min;
        min=A[1];
        A[1]=A[1]->next;
        if(A[1]==null){
            A[1]=A[heap_size];
            heap_size--;
        }
        min_Heapify(A,1);
        return min;
    }
    
    void build_Minheap(Link*A[]){
        heap_size=3;
        for(int i=heap_size/2;i>=1;i--)
            min_Heapify(A,i);
    }
    
    Link* mergeSort(Link*A[]){
        Link *T,*n;
        T=(Link*)malloc(sizeof(Link));
        T->next=null;
        n=T;
        Link *p;
        build_Minheap(A);
        while(heap_size!=1){
            p=extract_MinHeap(A);
            p->next=null;
            n->next=p;
            n=n->next;
        }
        n->next=A[1];
        return T;
    }
    
    void display(Link *h){
        Link*p=h;
        while(p!=null){
            cout<<p->data<<" ";
            p=p->next;
        }
        cout<<endl;
    }
    
    void display1(Link *h){
        Link*p=h->next;
        while(p!=null){
            cout<<p->data<<" ";
            p=p->next;
        }
        cout<<endl;
    }
    
    void main(){
        Link* A[4];
        int i;
        for(i=1;i<4;i++)
            A[i]=createLink();
    
        for(i=1;i<4;i++)
            display(A[i]);
        Link* T=mergeSort(A);
        display1(T);
        getchar();
        getchar();
    }
    贯彻自己的思想
  • 相关阅读:
    LeetCode-165 Compare Version Numbers
    shop--6.店铺注册--Thumbnailator图片处理和封装Util
    shop--6.店铺注册
    shop--5.使用Junit进行验证
    shop--4.SSM的各项配置
    shop--3.配置Maven
    shop--2.项目设计和框架搭建
    shop--1.创建maven项目
    AJAX 使用FormData 传送数据 DATA 为空 现象的处理
    Daemon Thread [http-nio-8080-exec-5] (Suspended (exception UnsatisfiedDependency))
  • 原文地址:https://www.cnblogs.com/593213556wuyubao/p/2830293.html
Copyright © 2011-2022 走看看