单向链表排序-归并排序

链表排序中使用归并排序:归并排序不仅保持了它的 O( nlog(n) ) 的时间复杂度,而且它在数组排序中广受诟病的空间复杂度,在链表排序中从 O(n) 降低到 O( log(n) )。

   对于单向链表的二路归并排序,首先是要找到链表的中间节点,将链表等分。我们可以使用快慢指针的方式找到链表的中间节点,即一个指针以一个步长移动,另一个指针使用两个步长移动,当快指针到结尾位置时,慢指针正好在中间位置。接下来是对两个链表进行归并排序。


源程序:

//filename : linklist.h

#ifndef __LINKLIST_H_H_
#define __LINKLIST_H_H_

struct LinkList{
	struct LinkList *next;
	int value;
};

extern struct LinkList *createLinkList(int num);

extern void printLinkList (struct LinkList *list);

extern struct LinkList *merge(struct LinkList *first, struct LinkList *second);

extern struct LinkList *mergeSort(struct LinkList *head);


#endif

源程序:

//filename: linklist.cpp

#include "linklist.h"
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

/**
 *创建一个带头
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值