快速排序算法链表实现c语言,双向链表的快速排序算法,编译通过,程序会崩溃,求助一下各位...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

要求就是在双向链表上实现快速排序:(.cpp文件)

#include

#include

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define OVERFLOW -2typedef struct DuLNode{//双向链表的定义

int data;//数据域

struct DuLNode *prior;//前一个指针

struct DuLNode *next; //后一个指针

}DuLNode,*DuLinkList;void InitDuList(DuLinkList &L,DuLinkList &front,DuLinkList &rear)//初始化一个双向链表

{

int data;

DuLinkList p,q;

p=L;//这个双向链表是有头指针的

printf("请输入待排序的序列(以-1结束):");

scanf("%d",&data);

while (data!=-1)//循环建立双向链表

{

q=(DuLinkList) malloc(sizeof(DuLinkList));//申请链表的节点空间

q->data=data;

q->prior=p;//p表示当前结点的前一个节点

p->next=q;

p=p->next;//p指向下一个节点

q->next=NULL;//当前结点的next指针域赋值为空

scanf("%d",&data);

}

rear=q;

front=L->next;

};DuLinkList Partition(DuLinkList &L,DuLinkList low,DuLinkList high)//快速排序中找枢轴记录

{

L->data=low->data;//把最前面一个数据作为枢轴记录,放到头节点的数据域上

while(low!=high){//循环条件是low和high不相等

while(low!=high&&high->data>=L->data)

high=high->prior;

low->data=high->data;

while(low!=high&&low->data<=L->data)

low=low->next;

high->data=low->data;

}

low->data=L->data;

return low;

};void Qsort(DuLinkList &L,DuLinkList low,DuLinkList high)//快速排序的主函数

{

DuLinkList pivoloc;

if(low!=high){

pivoloc=Partition(L,low,high);//找到枢轴记录的地址

if(pivoloc!=low)//如果枢轴记录的地址不等于低位的地址,则对在枢轴记录之前的那部分进行快速排序

Qsort(L,low,pivoloc->prior);

if(pivoloc!=high)//如果枢轴记录的地址不等于高位的地址,则对在枢轴记录之后的那部分进行快速排序

Qsort(L,pivoloc->next,high);

}

};void printList(DuLinkList L)//打印整个双向链表

{

DuLinkList p;

p=L->next;

printf("快速排序过后的结果为:");

while(p)

{

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

p=p->next;

}

};

int main()

{

DuLinkList L,front,rear;

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

L->prior=L->next=NULL;

front=rear=NULL;

InitDuList(L,front,rear);

Qsort(L,front,rear);

printList(L);

system("pause");

return 0;

}

附带说下,在Dev C++中编译通过,VS2012中也编译通过,但是在Dev C++中执行有时会崩溃,不是对所有的输入,但有一些会崩溃,但是单步执行没有问题。而在VS2012中调试也完全没有问题,但是单独执行那个.exe文件,同样崩溃。附上图片

f0dca4f1e8e3a6c11f62d33ea5fc46a3.png

1e63114913806832abbac77f80c1a4b5.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值