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

    #include<iostream>
    #include<time.h>
    using namespace std;
    
    
    //链表的归并排序
    struct listnode{
        int value;
        listnode* next;
        listnode(int value):value(value),next(NULL){}
    };
    
    listnode* find_mid(listnode* head){
        if(head==NULL)return NULL;
        listnode* fast=head;
        listnode* slow = head;
        while(fast->next!=NULL){
            if(fast->next->next!=NULL){
                fast = fast->next->next;
                slow = slow->next;
            }else
                break;
        }
        return slow;
    }
    
    listnode* merge_list(listnode* list1,listnode* list2){
        if(list1==NULL)return list2;
        if(list2==NULL)return list1;
        listnode* cur = NULL;
        listnode* head=NULL;
        if(list1->value<=list2->value){
            head = list1;
            list1 = list1->next;
        }else{
            head = list2;
            list2 = list2->next;
        }
        listnode* pnode = head;
        while(list1&&list2){
            if(list1->value<=list2->value){
                cur = list1;
                list1 = list1->next;
            }else{
                cur = list2;
                list2 = list2->next;
            }
            pnode->next = cur;
            pnode = pnode->next;
        }
        if(list1 == NULL)pnode->next = list2;
        if(list2 == NULL)pnode->next = list1;
        return head;
    }
    
    listnode* merge_sort(listnode* head){
        if(head==NULL||head->next==NULL)return head;
        listnode* mid = find_mid(head);
        listnode* m = mid->next;
        mid->next = NULL;
        listnode* list1 = merge_sort(head);
        listnode* list2 = merge_sort(m);
        head = merge_list(list1,list2);
        return head;
    }
    int main(){
        int length = 10;
        listnode* r = new listnode(0);
        listnode* head = r;
        for(int i=0;i<length;i++){
            r->next = new listnode(rand()%30);
            r = r->next;
        }
        listnode* p = merge_sort(head->next);
        delete head;
        head= p;
        while(head){
            listnode* temp = head;
            head = head->next;
            cout<<temp->value<<endl;
            delete temp;
        }
        system("pause");
    }
  • 相关阅读:
    搜集整理一些Cron表达式例子
    正确处理下载文件时HTTP头的编码问题(Content-Disposition)
    SpringMVC之RequestContextHolder分析
    协变、逆变与不变:数组、泛型、与返回类型
    用java实现一个简单的单用户登陆功能的思路
    为什么要进行URL编码
    spring mvc&mybatis搭配使用心得
    css(二)
    css(一)
    html
  • 原文地址:https://www.cnblogs.com/zhang-wen/p/4796253.html
Copyright © 2011-2022 走看看