zoukankan      html  css  js  c++  java
  • 链表的快速排序算法

    #include<stdio.h>
    #include<iostream>
    using namespace std;
    //定义结构体
    typedef struct Node{
        int val;
        Node* next;
    } Node;
    
    void swap(Node* a,Node* b){
        int tmp = a->val;
        a->val = b->val;
        b->val = tmp;
    }
    
    //找到分割点
    Node* getSeparator(Node* pBegin,Node* pEnd){
        Node* p = pBegin;
        Node* q = pBegin->next;
        int key = p->val;
        while(q!=pEnd){
            if(q->val < key){
                p = p->next;
                swap(p,q);
            }
            q = q->next;
        }
        swap(pBegin,p);
        return p;
    }
    
    //快速排序
    void fastSort(Node* pBegin,Node* pEnd){
        if(pBegin != pEnd){
            Node* separator = getSeparator(pBegin,pEnd);
            fastSort(pBegin,separator);
            fastSort(separator->next,pEnd);
        }
    }
    
    //创建链表
    Node* createNode(){
        int in;
        Node* n;
        cin >> in;
        if(in == 1000){
            n = NULL;
        }else{
            n = new Node();
            n->val = in;
            n->next = createNode();
        }
        return n;
    }
    
    int main(){
        Node* n1 = createNode();
        cout << "++++++++++++++排序前+++++++++++++++++"<< endl;
        Node* cur = n1;
        while(cur!=NULL){
            cout<<cur->val<<endl;
            cur = cur->next;
        }
    
    
        fastSort(n1,NULL);
        cout << "++++++++++++++排序后+++++++++++++++++"<< endl;
        cur = n1;
        while(cur!=NULL){
            cout<<cur->val<<endl;
            cur = cur->next;
        }
        return 0;
    }
  • 相关阅读:
    Jump Game II
    Trapping Rain Water
    First Missing Positive
    Median of Two Sorted Arrays
    noip2012开车旅行 题解
    AC自动机专题总结
    初探数位DP
    斯坦纳树 [bzoj2595][wc2008]游览计划 题解
    [bzoj3244][noi2013]树的计数 题解
    网络流模型小结
  • 原文地址:https://www.cnblogs.com/ningvsban/p/4061844.html
Copyright © 2011-2022 走看看