链表快速排序

本文介绍了如何将链表转换为数组,应用快速排序算法,然后将排序结果重新构建回链表的过程。详细探讨了链表排序的思路与快速排序在链表场景中的应用。
摘要由CSDN通过智能技术生成

主要思路,先将链表内容存储为数组,再对数组进行快速排序,最后将排序后的数组存储回链表。

#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 <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值