1. 链表逆置
// List.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
struct Node
{
int value;
Node *next;
Node()
{
value = -1;
next = 0;
}
~Node()
{
value = -1;
next = 0;
}
};
Node * create_list( int n );
void print_list( const Node *header );
Node* reservse_list( Node *header);
void destory_list( Node *header );
int quick_a_pass( int *pArray, int i, int j);
void quick_sort( int *pArray, int i, int j );
int main(int argc, char* argv[])
{
Node *header = create_list( 1 );
print_list( header );
printf("---------------------------------------------------------------\n");
Node *pTail = reservse_list( header );
print_list( pTail );
printf("---------------------------------------------------------------\n");
destory_list( pTail );
printf("---------------------------------------------------------------\n");
int array[10] = {2, 4, 1, 8, 9, 0, 7, 3, 5, 6};
quick_sort( array, 0, 9 );
for ( int i = 0; i < 10; ++i )
{
printf("%d ", array[i]);
}
printf("Hello World!\n");
return 0;
}
Node * create_list( int n )
{
int i = 0;
Node *pHeader = NULL;
Node *pCurrent = NULL;
while ( i < n )
{
Node *pNode = new Node;
pNode->value = i + 1;
if ( NULL == pHeader )
{
pCurrent = pHeader = pNode;
}
else
{
pCurrent->next = pNode;
pCurrent = pNode;
}
++i;
}
return pHeader;
}
void print_list( const Node *header )
{
int nCount = 0;
while ( header != NULL )
{
printf("Current Node Index %d-- > Value %d\n", nCount++, header->value );
header = header->next;
}
}
Node* reservse_list( Node *header)
{
Node *pFirst = header;
Node *pCurrent = NULL;
while( pFirst != NULL )
{
if ( NULL == pCurrent )
{
pCurrent = pFirst;
pFirst = pFirst->next;
pCurrent->next = NULL;
}
else
{
Node *pTemp = pFirst->next;
pFirst->next = pCurrent;
pCurrent = pFirst;
pFirst = pTemp;
}
}
return pCurrent;
}
void destory_list( Node *header )
{
int nCount = 0;
while ( header != NULL )
{
printf("Destory Node %d\n", nCount++ );
Node *Temp = header->next;
delete header;
header = Temp;
}
}
int quick_a_pass( int *pArray, int i, int j)
{
int k = i;
int nTemp = pArray[i];
while ( i < j )
{
while ( i < j )
{
if ( pArray[i] < nTemp ) ++i;
else break;
}
while ( i < j )
{
if ( pArray[j] > nTemp ) j--;
else break;
}
if ( i < j )
{
int nSwap = pArray[j];
pArray[j] = pArray[i];
pArray[i] = nSwap;
}
}
return i;
}
void quick_sort( int *pArray, int i, int j )
{
if ( i > j )
{
return;
}
if ( i < 0 )
{
return;
}
if ( j < 0 )
{
return;
}
if ( i == j )
{
return;
}
int nIndex = quick_a_pass( pArray, i, j );
quick_sort(pArray, i, nIndex -1 );
quick_sort(pArray, nIndex + 1, j );
}
2. 快速排序