高速列c++実装
2136 ワード
// .cpp : 。
//
#include "stdafx.h"
#include
#include
using namespace std;
void QuickSort(int e[], int first, int end);
int _tmain(int argc, _TCHAR* argv[])
{
srand(unsigned(time(NULL)));//set
int t_nArray[10];
//
for(int i = 0; i < 10; i++)
{
t_nArray[i] = rand()%100;
}
//
QuickSort(t_nArray, 0, 9);
//
for(int i = 0; i < 10; i++)
{
cout << t_nArray[i] ;
cout << "," ;
}
system("pause");
return 0;
}
void QuickSort(int e[], int first, int end)
{
int i=first,j=end;
int temp=e[first];//
while(i=temp) // first ,
j--;
e[i]=e[j];
while(ii+1)
QuickSort(e,i+1,end);
}
チェーンテーブル
void list::PriorSort(node* &head, node* &end)
{
node *head1, *head2, *end1, *end2; //
head1 = head2 = end1 = end2 = NULL;
if( head == NULL )
return; // ,
node *p, *pre1, *pre2; // key key
p = pre1 = pre2 = NULL;
int key = head->priority;
p = head->nextNode;
head->nextNode = NULL; // head
while( p != NULL )
{
// key
if ( p->priority < key ){
if( !head1 )
{
head1 = p;
pre1 = p;
}
else{
pre1->nextNode = p;
pre1 = p;
}
p = p->nextNode;
pre1->nextNode = NULL;
}
// key
else
{
if( !head2 )
{
head2 = p;
pre2 = p;
}
else
{
pre2->nextNode = p;
pre2 = p;
}
p = p->nextNode;
pre2->nextNode = NULL;
}
}
end1 = pre1;
end2 = pre2; //
//
PriorSort(head1, end1);
PriorSort(head2, end2);
// , key
//
if( end1 && head2)
{
end1->nextNode = head;
head->nextNode = head2;
head = head1;
end = end2;
}
//
else if(end1)
{
end1->nextNode = head;
end = head;
head = head1;
}
//
else if(head2)
{
head->nextNode = head2;
end = end2;
}
}