希尔排序
function shellSort ( arr)
{
var len = arr. length;
for ( var gap = Math. floor ( len / 2 ) ; gap > 0 ; gap = Math. floor ( gap / 2 ) )
{
for ( var i = gap; i < len; i++ )
{
var j = i;
var current = arr[ i] ;
while ( j - gap >= 0 && current < arr[ j - gap] )
{
arr[ j] = arr[ j - gap] ;
j = j - gap;
}
arr[ j] = current;
}
}
return arr;
}
归并排序
void f ( int n, int m)
{
int i, j, k, mid;
if ( n< m)
{
mid= ( n+ m) / 2 ;
int i= n, j= mid+ 1 , k= n;
f ( n, mid) ;
f ( mid+ 1 , m) ;
while ( i<= mid&& j<= m)
{
if ( a[ i] <= a[ j] )
b[ k++ ] = a[ i++ ] ;
else
{
b[ k++ ] = a[ j++ ] ;
w+ = mid- i+ 1 ;
}
}
while ( i<= mid)
b[ k++ ] = a[ i++ ] ;
while ( j<= m)
b[ k++ ] = a[ j++ ] ;
for ( i= n; i<= m; i++ )
a[ i] = b[ i] ;
}
}
快排
void sort ( int a[ ] , int start, int end)
{
int i, j, t;
i= start;
j= end;
int temp= a[ start] ;
if ( start> end)
return ;
while ( i< j)
{
while ( i< j&& a[ j] >= temp)
{
j-- ;
}
while ( i< j&& a[ i] <= temp)
{
i++ ;
}
if ( i< j)
{
t= a[ i] ;
a[ i] = a[ j] ;
a[ j] = t;
}
}
a[ start] = a[ i] ;
a[ i] = temp;
sort ( a, start, i- 1 ) ;
sort ( a, i+ 1 , end) ;
}
插入排序
void insertion_sort ( int * number, int n)
{
int i= 0 , ii= 0 , temp= 0 ;
for ( i= 1 ; i< n; i++ )
{
temp= number[ i] ;
ii= i- 1 ;
while ( ii>= 0 && temp< number[ ii] )
{
number[ ii+ 1 ] = number[ ii] ;
ii-- ;
}
number[ ii+ 1 ] = temp;
}
}
选择排序
void select_sort ( int R[ ] , int n)
{
int i, j, k, index;
for ( i= 0 ; i< n- 1 ; i++ )
{
k= i;
for ( j= i+ 1 ; j< n; j++ )
{
if ( R[ j] < R[ k] )
k= j;
}
if ( k!= j)
{
index= R[ i] ;
R[ i] = R[ k] ;
R[ k] = index;
}
}
}
冒泡排序
for ( j= 0 ; j< n- 1 ; j++ )
for ( i= 0 ; i< n- j- 1 ; i++ )
{
if ( a[ i] > a[ i+ 1 ] )
{
t= a[ i] ;
a[ i] = a[ i+ 1 ] ;
a[ i+ 1 ] = t;
}
}
堆排序
#include <stdio.h>
int a[ 100 ] ;
void Exchange ( int i, int n)
{
int temp;
temp = a[ i] ;
a[ i] = a[ n] ;
a[ n] = temp;
}
void Created ( int n)
{
if ( n == 2 ) {
if ( a[ 0 ] > a[ 1 ] ) {
printf ( "%d %d\n" , a[ 0 ] , a[ 1 ] ) ;
}
else
printf ( "%d %d\n" , a[ 1 ] , a[ 0 ] ) ;
return ;
}
int i;
for ( i = n/ 2 - 1 ; i >= 0 ; i-- )
{
if ( a[ 2 * i+ 1 ] > a[ i] && 2 * i+ 1 < n)
Exchange ( i, 2 * i+ 1 ) ;
if ( a[ 2 * i+ 2 ] > a[ i] && 2 * i+ 2 < n)
Exchange ( i, 2 * i+ 2 ) ;
}
int t;
t = a[ 0 ] ;
a[ 0 ] = a[ n- 1 ] ;
a[ n- 1 ] = t;
printf ( "%d " , a[ n- 1 ] ) ;
Created ( n- 1 ) ;
}
int main ( )
{
int n;
printf ( "请输入需要排序的元素的个数:" ) ;
scanf ( "%d" , & n) ;
printf ( "请输入%d个元素:" , n) ;
for ( int j = 0 ; j < n; j++ )
{
scanf ( "%d" , & a[ j] ) ;
}
Created ( n) ;
return 0 ;
}