双向链表的快速排序

来源:互联网 发布:php源码 月卡验证 编辑:程序博客网 时间:2024/05/21 06:35
#include <stdio.h>#include <stdlib.h>#define ElemType inttypedef 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;}
原创粉丝点击