• 链表的快速排序算法


    #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;
    }
  • 相关阅读:
    华为手机wifi调试adb,断开数据线offlin
    appium 识别抖音视频已经播放完成
    对于学习新知识的一点自我反思
    部分软件激活
    AndroidStudio 创建简单的app
    App 逆向思路
    链家
    pyqt5 截屏
    3.无重复字符的最长子串
    1.两数之和
  • 原文地址:https://www.cnblogs.com/ningvsban/p/4061844.html
Copyright © 2020-2023  润新知