第一、插入排序
void InsertSort( int *a, int len )
{
int i, j, key ;
for( i=1; i<len; i++ )
{
key = a[i] ;
for( j=i-1; j>=0&&a[j]>key; j-- )
a[j+1] = a[j] ;
a[j+1] = key ;
}
}
第二、冒泡排序
void bubSort( int *a, int len )
{
int i, j, temp ;
for( i=len; i>0; i-- )
{
for( j=1; j<i; j++ )
{
if( *(a+j)<*(a+j-1) )
{
temp = *(a+j) ;
*(a+j) = *(a+j-1) ;
*(a+j-1) = temp ;
}
}
}
}
第三、shell排序
void shell( int *a, int len )
{
int i, j, temp, step ;
for( step=len/2; step>0; step/=2 )
{
for( i=step; i<len; i++ )
{
temp = *( a+i ) ;
for( j=i-step; j>=0&&temp<*(a+j); j-=step )
{
*(a+j+step) = *(a+j) ;
}
*(a+j+step) = temp ;
}
}
}
第四、快速排序(1)
int divide( int a[], int low, int high )
{
int k = a[low] ;
do
{
while ( low<high && a[high]>=k )
--high ;
if ( low<high )
{
a[low] = a[high] ;
++low ;
}
while ( low<high && a[low]<=k )
++low ;
if ( low<high )
a[high] = a[low] ;
} while ( low!=high ) ;
a[low] = k ;
return low ;
}
void quiSort( int a[], int low, int high )
{
int mid ;
if( low>=high ) return ;
mid = divide( a, low, high ) ;
quiSort( a, low, mid-1 ) ;
quiSort( a, mid+1, high ) ;
}
第五、快速排序(2)
其实只是分区方式不同而已,所以只列出分区函数。
int partition( int a[], int low, int high )
{
int key = a[high] ;
int i = low - 1 ;
int temp, j ;
for( j=low; j<=high-1; j++ )
{
if( a[j] <=key )
{
i = i+1 ;
temp = a[i] ;
a[i] = a[j] ;
a[j] = temp ;
}
}
temp = a[i+1] ;
a[i+1] = a[high] ;
a[high] = temp ;
return (i+1) ;
}
第六、归并排序
void Merge_TwoArr( int *a, int *temp, int start, int mid, int end )
{
int i, j, k ;
k = start ;
i = start ;
j = mid + 1 ;
while( i<=mid && j<=end )
{
if( a[i]<=a[j] )
temp[k++] = a[i++] ;
else
temp[k++] = a[j++] ;
}
while( i<=mid )
temp[k++] = a[i++] ;
while( j<=end )
temp[k++] = a[j++] ;
for( i=start; i<=end; i++ )
a[i] = temp[i] ;
}
void MergeSort( int *a, int *temp, int start, int end )
{
if( start<end )
{
int mid = ( start+end )/2 ;
MergeSort( a, temp, start, mid ) ;
MergeSort( a, temp, mid+1, end ) ;
Merge_TwoArr( a, temp, start, mid, end ) ;
}
}