#include "stdio.h"
#include <stdlib.h>
typedef struct link{
int data;
struct link *next;
}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");
}