双向链表的快速排序


#include <stdio.h>

#include <stdlib.h>

#define ElemType int


typedef struct DuLNode

{

ElemType data;

struct DuLNode* next;

struct DuLNode* prior;

}DuLNode,*DuLinkList;


void initList(DuLinkList* L)

{

*L=(DuLinkList)malloc(sizeof(DuLNode));

(*L)->data=49;

(*L)->prior=NULL;

(*L)->next=NULL;

}


void insertList(DuLinkList L,ElemType elem)

{

DuLinkList p=(DuLinkList)malloc(sizeof(DuLNode));

p->data=elem;

p->next=NULL;

while(L->next!=NULL)

L=L->next;

L->next=p;

p->prior=L;

}


void traverseList(DuLinkList L)

{

int cnt=1;

while(L->next)

{ 

printf("%d   ",L->data);

L=L->next;

}

printf("%d\n",L->data);

}


void freeList(DuLinkList L)

{

DuLinkList p;

while(L->next)

{

p=L;

L=L->next;

free(p);

}

free(L);

}


DuLinkList  partition(DuLinkList L,DuLinkList low,DuLinkList high)

{

DuLinkList pivotkey=(DuLinkList)malloc(sizeof(DuLNode));

pivotkey->data=low->data;

while(low!=high){

while(low!=high&&high->data>=pivotkey->data) high=high->prior;

low->data=high->data;

while(low!=high&&low->data<=pivotkey->data)  low=low->next;

high->data=low->data;

}

low->data=pivotkey->data;

return low;

}


void sortList(DuLinkList L,DuLinkList low,DuLinkList high)

{

DuLinkList pivotloc=partition(L,low,high);

if(pivotloc!=low)

sortList(L,low,pivotloc->prior);

if(pivotloc!=high)

sortList(L,pivotloc->next,high);

}

int  main()
{
 DuLinkList L;
 initList(&L);
 insertList(L,38);
 insertList(L,65);
 insertList(L,97);
 insertList(L,76);
 insertList(L,13);
 insertList(L,27);
 insertList(L,50);
 insertList(L,23);
 insertList(L,17);
 insertList(L,30);
 traverseList(L);
 DuLinkList low,high,L2;
 low=L;L2=L;
 while(L2->next!=NULL)
  L2=L2->next;
 high=L2;
 sortList(L,low,high);
 traverseList(L);
 freeList(L);
 getchar();
 return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值