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要指向头指针!