在这里插入代码片
#include <stdio.h>
#include <stdlib.h>
struct node{
struct node* next;
int data;
};
typedef struct node node;
node* q_sort(node* begin, node* end, node* begin_prev) //[begin,end)
{
if(begin == NULL || begin->next == end || begin == end)
{
return begin;
}
node* base = begin;
for(node *pos = begin->next, *pos_prev = begin; pos != end; )
{
if(pos->data >= base->data) //大于等于基准值,位置不动
{
pos_prev = pos;
pos = pos->next;
}
else
{
node* tmp = pos->next;
pos_prev->next = pos->next;
if(begin_prev)
begin_prev->next = pos;
pos->next = begin;
begin = pos;
pos = tmp;
}
}
node* head = q_sort(begin, base, begin_prev);
q_sort(base->next, end, base);
return head;
}
node* create_list(int a[], int len)
{
node *head = NULL;
for(int i=0; i<len; ++i)
{
node* p = (node *)malloc(sizeof(node));
p->data = a[i];
p->next = head;
head = p;
}
return head;
}
int main()
{
int a[] = {12,13,1,2,14,3,4,6};
int len = sizeof(a) / sizeof(int);
node *head = create_list(a, len);
head = q_sort(head, NULL, NULL);
for(node* pos = head; pos!=NULL; pos=pos->next)
{
printf("%d ", pos->data);
}
return 0;
}
单链表快排
最新推荐文章于 2021-09-11 23:52:29 发布