主要思路,先将链表内容存储为数组,再对数组进行快速排序,最后将排序后的数组存储回链表。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
typedef struct _node
{
int val;
struct _node *pre;
struct _node *next;
} NODE_T;
typedef struct
{
NODE_T *head;
NODE_T *tail;
int count;
} LIST_T;
typedef int (*func_cmp)(int node1, int node2);
void swap_node(NODE_T *node1, NODE_T *node2)
{
int tmp = node1->val;
node1->val = node2->val;
node2->val = tmp;
}
int cmp_node(int node1, int node2)
{
return node1 - node2;
}
void quicksort_r(int *s, int l, int r, func_cmp cmp)
{
if (l < r)
{
//Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && (cmp(s[j], x) >= 0)) // 从右向左找第一个小于x的数
j--;
if(i <