注意指向指针的指针的应用。
#include <iostream>
#include <ctime>
using namespace std;
struct node{
int data;
node* next;
};
node* partion(node** head, node* end)
{
if(*head==end || (*head)->next==end)
return *head;
node** p = &((*head)->next);
node* pivot = *head;
do{
if((*p)->data < pivot->data)
{
node** pp1 = p;
node* p1 = *p;
*p = (*p)->next;
p1->next = *head;
*head = p1;
p = pp1;
}
else
p = &((*p)->next);
}while(*p != end);
return pivot;
}
void qsort_link(node** head, node* end)
{
if(*head==end)
return ;
node* mid = partion(head, end);
qsort_link(head, mid);
qsort_link(&(mid->next), end);
}
int main()
{
int n = 1000000;
int i;
srand(time(NULL));
node* head = new node;
head->data = rand()%(2*n);
head->next = NULL;
node* h = head;
node* p;
for(i=1; i<n; i++)
{
p = new node;
p->data = rand()%(2*n);
p->next = NULL;
h->next = p;
h = p;
}
long t1 = clock();
qsort_link(&head, NULL);
long t2 = clock();
cout<<(t2-t1)<<"ms"<<endl;
return 0;
}