这段链表的快速排序的代码哪里出了问题,vs2010上调试不过

问题描述

这段链表的快速排序的代码哪里出了问题,vs2010上调试不过

void myquicksort( node *phead, node *pback )
{

if( phead == pback )
{
return;
}
else
{
int key = phead->data ;
node *p1 = NULL;
for( node *p2 = phead->pNext; p2 != pback; p2 = p2->pNext )
{
if( p2->data < key )
{
p1 = p1->pNext;
int temp;
temp = p1->data;
p1->data = p2->data;
p2->data = temp;
}
}
int temp;
temp = p1->data;
p1->data = phead->data;
phead->data = temp;

        myquicksort( phead, p1 );
        myquicksort( p1->pNext, pback );

}
}

解决方案

p1空指针,没指向就使用了。

解决方案二:

 void myquicksort(node* &head, node* &end){
    node *head1, *head2, *end1, *end2;
    head1 =  head2 = end1 = end2  = NULL;   

    if( head == NULL ) return;

    node *p, *pre1, *pre2;
    p = pre1 = pre2 = NULL;

    int key = head->data;
    p = head->pNext; head->pNext = NULL;
    while( p != NULL ) {
        if ( p->data < key ){
            if( !head1 ) { head1 = p; pre1 = p; }
            else{ pre1->pNext = p; pre1 = p; }
            p = p->pNext;
            pre1->pNext = NULL;
        }
        else{
            if( !head2 ) { head2 = p; pre2 = p; }
            else { pre2->pNext = p; pre2 = p; }
            p = p->pNext;
            pre2->pNext = NULL;
        }
    }

    end1 = pre1; end2 = pre2;

    myquicksort(head1, end1);
    myquicksort(head2, end2);

    if( end1 && head2){
        end1->pNext = head; head->pNext = head2;
        head = head1;   end = end2;}

    else if(end1) {
        end1->pNext = head;
        end = head; head = head1; } 

    else if(head2){
        head->pNext = head2;    end = end2;}
}

解决方案三:

我知道了,漏了一句p1 = phead,p1要指向头指针!

解决方案四:

快速排序(VS2010)的代码

时间: 2024-07-28 18:05:47

这段链表的快速排序的代码哪里出了问题,vs2010上调试不过的相关文章

深入单链表的快速排序详解_C 语言

单链表的快排序和数组的快排序基本思想相同,同样是基于划分,但是又有很大的不同:单链表不支持基于下标的访问.故书中把待排序的链表拆分为2个子链表.为了简单起见,选择链表的第一个节点作为基准,然后进行比较,比基准小得节点放入左面的子链表,比基准大的放入右边的子链表.在对待排序链表扫描一遍之后,左边子链表的节点值都小于基准的值,右边子链表的值都大于基准的值,然后把基准插入到链表中,并作为连接两个子链表的桥梁.然后分别对左.右两个子链表进行递归快速排序,以提高性能.但是,由于单链表不能像数组那样随机存储

一段ASP防采集的代码

采集 一段ASP防采集的代码<%        '作用:文字防复制乱码 函数        'Date:2006-3-6        '作者:blue2004        '参数str 为原文,str1作者也是你自己,reslut产生乱码的种子        Function ReadToCode(str,Str1,result)                dim name                dim i,j,k                If isnull(str) th

刚学c++的小白,在网上看到一段读写ini文件的代码,想试试结果有错。

问题描述 刚学c++的小白,在网上看到一段读写ini文件的代码,想试试结果有错. #include "stdafx.h" #include #include #include using namespace std; int main() { LPTSTR lpPath= new char[MAX_PATH]; strcpy(lpPath, "D:\IniFileName.ini"); WritePrivateProfileString("LiMing&q

builder-麻烦大家帮我详细解释下下面这段与串口交互的代码,谢谢!

问题描述 麻烦大家帮我详细解释下下面这段与串口交互的代码,谢谢! void __fastcall TfrmPatient::edtDosageDblClick(TObject *Sender) { //read comm data,then set in edtDosage edit //open com port HANDLE hCom = CreateFile(g_ConfigManager.sComPort.c_str(),GENERIC_WRITE,0,NULL,OPEN_EXISTIN

c++-一段关于C++空间分配的代码的疑问

问题描述 一段关于C++空间分配的代码的疑问 代码如下: #include"stdafx.h" class X{ public: X(){} ~X(){printf("end");} }; void f(int i) { if(i<10) { //goto jump1; } X x1; jump1: switch(i){ case 1: X x2; break; //case 2: X x3; break; } } int main() { f(1); ret

代码提示出错-请问我这段代码哪里出错了,为什么总是异常,我是个新手

问题描述 请问我这段代码哪里出错了,为什么总是异常,我是个新手 package control; import javax.swing.JFrame public class DebugTest { public static void main(String[] args) { int[] ints= new int[20]; try { for (int i=0; i < 20; i ++) { ints[i] = i+1; Ststem.out.println(i+1); } } catc

xaml-wpf中,我想要将一段XAML转换为C#后台代码,请问如何实现

问题描述 wpf中,我想要将一段XAML转换为C#后台代码,请问如何实现 local:MyToolTipContent//tt:ToolTipBehavior/i:Interaction.Behaviors 解决方案 你的代码挂了~~~~~~~~~~~~ 解决方案二: local:MyToolTipContent//tt:ToolTipBehavior/i:Interaction.Behaviors 解决方案三: <Button Content="执行" Margin="

for-谁帮我改改这段代码问题出在哪里?

问题描述 谁帮我改改这段代码问题出在哪里? int score; //每门课成绩 int sum = 0; //成绩之和 double avg = 0.0; //平均分 Console.WriteLine(""请输入学生姓名:""); string name = Console.ReadLine(); for (int i = 0; i < 5; i++) { Console.Write(""请输入五门课中第""+(i+

c++-一段网络的通信的代码,怎么做单元测试?(代码如下)

问题描述 一段网络的通信的代码,怎么做单元测试?(代码如下) 本人使用的是cppunit框架,代码如下: 想对这个Worker函数进行单元测试,说明:Worker是在一个线程中执行的,Connect()是连接到服务器的代码,recv(...)是收取包头,即文件长度,ReceiveOnPackage是获取数据.问题是这段代码要在真实环境测试,那必须开启服务端,感觉这和单元测试要求的代码隔离有所违背(不知道自己说的对不对).如果要模拟服务器端,那应该如何做了?求教,各位大牛,先谢谢了! void T