//#include <iostream>
#include "stdio.h"
#include "stdlib.h"
//using namespace std;
//构造结点并初始化
typedef struct node
{
int val;
struct node * next;
}mynode,*pmynode,node;
void swap(int* a,int * b)
{
int tmp = *a;
* a = *b;
* b = tmp ;
}
//定位
node *partion(node *pbegin ,node * pend)
{
if(pbegin ==pend )
return pbegin;
int mykey = pbegin ->val;
node * p =pbegin ;
node* q =pbegin;
while(q != NULL)
{
if(q->val< mykey )
{
p = p->next;
//这两种交换写法都是正确的
//swap( &(p->val) ,&(q ->val)); //小于则交换
swap( &p->val ,&q ->val); //小于则交换
}
q =q ->next;//否则一直往下走
}
swap(&p->val,&pbegin->val); //定位
return p;
}
void quick_sort(node *pbegin,node *pend)
{
if(pbegin ==pend || pbegin == NULL || pend == NULL)
return ;
node *mid =partion(pbegin,pend);
quick_sort(pbegin,mid);
quick_sort(mid->next,pend);
}
node *mysort(node *head,node *end)
{ //如果头结点为空,则直接跳出循环
//if(head ==NULL ||head -> next==NULL);
//return head;
quick_sort(head ,end);
return head;
}
int main()
{
node a = {
.val = 37,
.next = NULL,
};
node b = {
.val = 4,
.next = NULL,
};
node c = {
.val = 6,
.next = NULL,
};
node d = {
.val = 2,
.next = NULL,
};
node e = {
.val = 5,
.next = NULL,
};
node f = {
.val = 7,
.next = NULL,
};
a.next = &b;
b.next = &c;
c.next = &d;
d.next = &e;
e.next = &f;
//swap( & b->val ,& c->val);
pmynode head = & a;
// printf("%d\n", head->val);
// printf("%d\n", (&a)->val);
//printf("%d", &a->val);
//如果节点的指针不为空则打印节点
while(head)
{
printf("%d \t",head ->val);
head =head -> next;
}
printf("\n");
// pmynode head0 =mysort(head,&f);
pmynode head0 =mysort(&a,&b);
while(head0)
{
printf("%d \t",head0 ->val);
head0 =head0 -> next;
}
printf("\n");
return 0;
}