编辑代码

#include "stdio.h"
#include <stdlib.h>
typedef struct link{
    int data;
    struct link *next;
    /* data */
}link;

link *phead;
int a[10]={5,3,9,7,8,0,1,4,2,6};
link *create_link(){
  link *head,*pf,*pb;       //创建链表
    for(int i=0;i<10;i++){
    pb = (link*)malloc(sizeof(link));
    pb->data=a[i];
    if(i == 0)
    head=pf=pb;
    else 
    pf->next = pb;
    pb->next = NULL;
    pf = pb;
    }
    return head;
}

int linklen(link *head){           //获取链表长度
    int len=0;
    link *pf=head;
    while(pf!=NULL){
        pf=pf->next;
        len++;
    }
    return len;
}

void printf_link(link *head){      //读链表
    while(head!=NULL){
    printf("%d ",head->data);
    head=head->next;
    }
}

int *deal(int *arr, int begin, int end){
    int tmp = arr[begin];
    int *i = &arr[begin];
    int *j = &arr[end];
    while(i != j){
        while(*(j) >= tmp && j > i)
            j--;
        while(*(i) <= tmp && j > i)
            i++;
        if(j > i){
            int t = *i;
            *i = *j;
            *j = t;
        }
    }
    arr[begin] = *i;
    *i = tmp;
    return i;
}

int dir(link *pf,link *pb){
    int flag=0;
    while (pf!=NULL){
        if(pf==pb){flag=1;break;}
        else flag=0;
        pf=pf->next;
    }
    return flag;
}

void Quick_Sort_array(int *arr, int begin, int end){
    if(begin >= end)
    return;
    int *i = deal(arr,begin,end);
    for(int i=0;i<10;i++)
    printf("%d ",a[i]);
    printf("\n");
    Quick_Sort_array(arr, begin, i-arr-1);
    Quick_Sort_array(arr, i-arr+1, end);
}

link *link_go(link *p,int n){
    p=phead;
    for(int i=0;i<n;i++){p=p->next;}
    return p;
}

void Quick_Sort_link(int begin, int end){
    int j,k,tmp=0,i;
    link *pf;
    link *pb;
    link *now_head;
    j=begin;k=end;
    now_head = link_go(now_head,begin);
    pb = link_go(pb,end);
    pf=now_head;
    if(begin<0||end>10||begin>=end)
    return;
    tmp = now_head->data;
    while(k != j){
        while(pb->data >= tmp && j<k){
            k--;
            pb = link_go(pb,k);
        }
        while(pf->data <= tmp && j<k){   
            j++;
            pf = link_go(pf,j);
        }
        if(pf->data > pb->data){
            int t = pf->data;
            pf->data = pb->data;
            pb->data = t;
        }
    }
    now_head->data = pf->data;
    pf->data = tmp;

    printf("\n");
    printf_link(phead);

    Quick_Sort_link(begin,j-1);
    Quick_Sort_link(j+1,end);
}

int main(){
    phead = create_link();
    printf_link(phead);                 //打印链表
    printf("\n");

    Quick_Sort_link(0,9);               //链表快排
    printf("\n%d\n",linklen(phead));
    printf_link(phead);
    printf("\n");
    printf("\n");

    Quick_Sort_array(a,0,9);            //数组快排
    for(int i=0;i<10;i++)
    printf("%d ",a[i]);
    printf("\n");
}