#include <bits/stdc++.h>
using namespace std;
typedef int ElementType;
/*插入排序*/ /*时间复杂度O(N²)*/
void InsertionSort ( ElementType *A, int N )
{
int j, P;
ElementType Tmp;
for( P=1; P<N; P++)
{
Tmp = A[P];
for( j=P; j>0 && A[j-1]>Tmp; j-- )
A[j] = A[j-1];
A[j] = Tmp;
}
}
/*希尔排序*/ ///特殊的插入排序
void Shallsort ( ElementType *A, int N )
{
int i, j, Increment;
ElementType Tmp;
for( Increment=N/2; Increment>0; Increment/=2)
{
for( i=Increment; i<N; i++ )
{
Tmp = A[i];
for( j=i; j>=Increment && Tmp < A[j - Increment]; j-=Increment )
A[j] = A[j - Increment];
A[j] = Tmp;
}
}
}
/*堆排序*/
#define LeftChild( i ) ( 2 * ( i ) + 1 )
void PercDown ( ElementType *A, int i, int N )
{
int Child;
ElementType Tmp;
for( Tmp = A[i]; LeftChild(i) < N; i = Child )
{
Child = LeftChild(i);
if( Child != N-1 && A[Child + 1] > A[Child] )
Child++;
if( Tmp < A[Child] )
A[i] = A[Child];
else break;
}
A[i] = Tmp;
}
void Heapsort( ElementType *A, int N )
{
int i;
for( i = N/2; i >= 0; i-- )
PercDown( A, i, N);
for( i = N-1; i >= 0; i-- )
{
swap( A[0], A[i] );
PercDown( A, 0, i );
}
}
/*快速排序*/
void qusort( int *a, int lt, int rt )
{
if(lt >= rt) return;
int i = lt, j = rt, key = a[lt];
while(i<j)
{
while(i<j && a[j] >= key)
j--;
a[i] = a[j];
while(i<j && a[i] <= key)
i++;
a[j] = a[i];
}
a[i] = key;
qusort( a, lt, i-1 );
qusort( a, i+1, rt );
}
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void*, const void*))
//目标数组, 项数, sizeof(int), 函数指针
int mycomp ( const void *p1, const void *p2 )
{
/*使用指向int类型的指针访问值*/
const int *a1 = (const int *) p1;
const int *a2 = (const int *) p2;
if( *a1 < *a2 ) /*从小到大排序*/
return -1;
else if( *a1 == *a2 )
return 0;
else
return 1;
}
/*归并排序*/
/* Lpos = start of left half, Rpos = start of right half */
void Merge ( ElementType *A, ElementType *TmpArray,
int Lpos, int Rpos, int RightEnd )
{
int i, LeftEnd, NumElements, TmpPos;
LeftEnd = Rpos - 1;
TmpPos = Lpos;
NumElements = RightEnd - Lpos + 1;
/* main loop */
while( Lpos <= LeftEnd && Rpos <= RightEnd )
{
if( A[Lpos] <= A[Rpos] )
TmpArray[TmpPos++] = A[Lpos++]; /* Copy rest of first half */
else
TmpArray[TmpPos++] = A[Rpos++]; /* Copy rest of second half */
}
while( Lpos <= LeftEnd )
TmpArray[TmpPos++] = A[Lpos++];
while( Rpos <= RightEnd )
TmpArray[TmpPos++] = A[Rpos++];
/* Copy TmpArray back */
for( i=0; i<NumElements; i++, RightEnd-- )
A[RightEnd] = TmpArray[RightEnd];
}
void Msort ( ElementType *A, ElementType *TmpArray,
int Left, int Rigth )
{
int Center;
if( Left < Right )
{
Center = ( Left + Right ) / 2;
Msort( A, TmpArray, Left, Center );
Msort( A, TmpArray, Center+1, Right );
Merge( A, TmpArray, Left, Center+1; Right );
}
}
void Mergesort ( ElementType *A, int N )
{
ElementType *TmpArray;
TmpArray = malloc( N * sizeof( ElementType ));
if( !TmpArray )
{
Msort( A, TmpArray, 0, N-1 );
free( TmpArray );
}
else
// FatalError( "No space for tmp array!!!" );
return;
}
/*选择排序*/
//略
/*桶排序*/
//略
/*冒泡排序*/
//略
int main()
{
cout << "Hello world!" << endl;
return 0;
}