冒泡排序:
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
# define N 10
void bubble_sort ( int k[ ] , int n)
{
int i, j, temp;
for ( i = 0 ; i < n - 1 ; i++ )
{
for ( j = 0 ; j < n- 1 - i; j++ )
{
if ( k[ j] > k[ j+ 1 ] )
{
temp = k[ j] ;
k[ j] = k[ j+ 1 ] ;
k[ j+ 1 ] = temp;
}
}
}
}
int main ( )
{
int k[ N] ;
int i;
srand ( ( unsigned int ) time ( NULL ) ) ;
for ( i= 0 ; i< N; i++ )
k[ i] = rand ( ) % N;
bubble_sort ( k, N) ;
for ( i= 0 ; i< N; i++ )
printf ( "%d " , k[ i] ) ;
printf ( "\n" ) ;
system ( "pause" ) ;
return 0 ;
}
选择排序:
# include <stdio.h>
# include <stdlib.h>
void select ( int k[ ] , int n)
{
int i, j, temp, min;
for ( i = 0 ; i < n - 1 ; i++ )
{
min = i;
for ( j = i + 1 ; j < n; j++ )
{
if ( k[ j] < k[ min] )
min = j;
}
if ( min != i)
{
temp = k[ i] ;
k[ i] = k[ min] ;
k[ min] = temp;
}
}
printf ( "\n" ) ;
}
int main ( )
{
int i, k[ 10 ] = { 2 , 5 , 7 , 9 , 0 , 1 , 2 , 4 , 3 , 6 } ;
select ( k, 10 ) ;
for ( i = 0 ; i < 10 ; i++ )
printf ( "%d " , k[ i] ) ;
system ( "pause" ) ;
return 0 ;
}
插入排序:
# include "stdio.h"
void InsertSort ( int a[ ] , int n)
{
int i, j, temp= 0 ;
for ( i= 1 ; i< n; i++ )
{
if ( a[ i] < a[ i- 1 ] )
{
temp = a[ i] ;
for ( j= i- 1 ; j>= 0 && a[ j] > temp; j-- )
{
a[ j+ 1 ] = a[ j] ;
}
a[ j+ 1 ] = temp;
}
}
}
void main ( )
{
int a[ 10 ] = { 0 , 6 , 67 , 34 , 56 , 45 , 12 , 4 , 7 , 49 } ;
int i= 0 ;
InsertSort ( a, 10 ) ;
for ( i= 0 ; i< 10 ; i++ )
printf ( "%d " , a[ i] ) ;
}
归并排序:
# include <stdio.h>
# include <stdlib.h>
# define N 7
void merge ( int arr[ ] , int low, int mid, int high) {
int i, k;
int * tmp = ( int * ) malloc ( ( high- low+ 1 ) * sizeof ( int ) ) ;
int left_low = low;
int left_high = mid;
int right_low = mid + 1 ;
int right_high = high;
for ( k= 0 ; left_low<= left_high && right_low<= right_high; k++ ) {
if ( arr[ left_low] <= arr[ right_low] ) {
tmp[ k] = arr[ left_low++ ] ;
} else {
tmp[ k] = arr[ right_low++ ] ;
}
}
if ( left_low <= left_high) {
for ( i= left_low; i<= left_high; i++ )
tmp[ k++ ] = arr[ i] ;
}
if ( right_low <= right_high) {
for ( i= right_low; i<= right_high; i++ )
tmp[ k++ ] = arr[ i] ;
}
for ( i= 0 ; i< high- low+ 1 ; i++ )
arr[ low+ i] = tmp[ i] ;
free ( tmp) ;
return ;
}
void merge_sort ( int arr[ ] , unsigned int first, unsigned int last) {
int mid = 0 ;
if ( first< last) {
mid = ( first+ last) / 2 ;
merge_sort ( arr, first, mid) ;
merge_sort ( arr, mid+ 1 , last) ;
merge ( arr, first, mid, last) ;
}
return ;
}
int main ( ) {
int i;
int a[ N] = { 32 , 12 , 56 , 78 , 76 , 45 , 36 } ;
printf ( "排序前 \n" ) ;
for ( i= 0 ; i< N; i++ )
printf ( "%d\t" , a[ i] ) ;
merge_sort ( a, 0 , N- 1 ) ;
printf ( "\n 排序后 \n" ) ;
for ( i= 0 ; i< N; i++ )
printf ( "%d\t" , a[ i] ) ; printf ( "\n" ) ;
system ( "pause" ) ;
return 0 ;
}
快速排序:
# include <stdlib.h>
# include <stdio.h>
# include <string.h>
void PrintArray ( int arr[ ] , int len)
{
int i;
for ( i = 0 ; i < len; i++ )
printf ( "%d " , arr[ i] ) ;
printf ( "\n" ) ;
}
void QuickSort ( int arr[ ] , int start, int end)
{
int i = start, j = end;
int temp = arr[ start] ;
if ( i < j)
{
while ( i < j)
{
while ( i< j && arr[ j] >= temp)
{
j-- ;
}
if ( i < j)
{
arr[ i] = arr[ j] ;
i++ ;
}
while ( i< j && arr[ i] < temp)
{
i++ ;
}
if ( i < j)
{
arr[ j] = arr[ i] ;
j-- ;
}
}
arr[ i] = temp;
QuickSort ( arr, start, i - 1 ) ;
QuickSort ( arr, i + 1 , end) ;
}
}
int main ( ) {
int arr[ 10 ] = { 8 , 6 , 5 , 7 , 9 , 0 , 1 , 2 , 4 , 3 } ;
int len = sizeof ( arr) / sizeof ( int ) ;
PrintArray ( arr, len) ;
QuickSort ( arr, 0 , len - 1 ) ;
PrintArray ( arr, len) ;
system ( "pause" ) ;
return 0 ;
}
希尔排序:
# include <stdlib.h>
# include <stdio.h>
# include <string.h>
# include <time.h>
# define N 10
void PrintArray ( int arr[ ] , int len)
{
int i;
for ( i = 0 ; i < len; i++ )
printf ( "%d " , arr[ i] ) ;
printf ( "\n" ) ;
}
void ShellSort ( int arr[ ] , int len)
{
int i, j, k, temp, increasement = len;
do {
increasement = increasement / 3 + 1 ;
for ( i = 0 ; i < increasement; i++ )
{
for ( j = i + increasement; j < len; j += increasement)
{
if ( arr[ j] < arr[ j - increasement] )
{
temp = arr[ j] ;
for ( k = j - increasement; k >= 0 && arr[ k] > temp; k -= increasement)
{
arr[ k + increasement] = arr[ k] ;
}
arr[ k + increasement] = temp;
}
}
}
} while ( increasement > 1 ) ;
}
int main ( )
{
int arr[ N] ;
int i;
srand ( ( unsigned ) time ( NULL ) ) ;
for ( i = 0 ; i < N; i++ )
{
arr[ i] = rand ( ) % N;
}
PrintArray ( arr, N) ;
ShellSort ( arr, N) ;
PrintArray ( arr, N) ;
system ( "pause" ) ;
return 0 ;
}
堆排序:
# include <stdlib.h>
# include <stdio.h>
# include <string.h>
void PrintArray ( int arr[ ] , int len)
{
int i;
for ( i = 0 ; i < len; i++ )
printf ( "%d " , arr[ i] ) ;
printf ( "\n" ) ;
}
void swap ( int arr[ ] , int a, int b)
{
int temp = arr[ a] ;
arr[ a] = arr[ b] ;
arr[ b] = temp;
}
void HeapAdjust ( int arr[ ] , int index, int len)
{
int max = index;
int lchild = index * 2 + 1 ;
int rchild = index * 2 + 2 ;
if ( lchild< len&& arr[ lchild] > arr[ max] )
max = lchild;
if ( rchild< len&& arr[ rchild] > arr[ max] )
max = rchild;
if ( max != index)
{
swap ( arr, max, index) ;
HeapAdjust ( arr, max, len) ;
}
}
void HeapSort ( int arr[ ] , int len)
{
int i;
for ( i = len / 2 - 1 ; i >= 0 ; i-- )
{
HeapAdjust ( arr, i, len) ;
}
for ( i = len - 1 ; i >= 0 ; i-- )
{
swap ( arr, 0 , i) ;
HeapAdjust ( arr, 0 , i) ;
}
}
int main ( ) {
int arr[ 10 ] = { 8 , 6 , 5 , 7 , 9 , 0 , 1 , 2 , 4 , 3 } ;
int len = sizeof ( arr) / sizeof ( int ) ;
PrintArray ( arr, len) ;
HeapSort ( arr, len) ;
PrintArray ( arr, len) ;
system ( "pause" ) ;
return 0 ;
}
计数排序:
# include <stdio.h>
# include <stdlib.h>
# define random ( x) rand ( ) % ( x)
# define NUM 100
# define MAXNUM 200
void countingSort ( int A[ ] , int n, int k) {
int * c, * b;
int i;
c = ( int * ) malloc ( sizeof ( int ) * k) ;
b = ( int * ) malloc ( sizeof ( int ) * n) ;
for ( i = 0 ; i < k; i++ )
c[ i] = 0 ;
for ( i = 0 ; i < n; i++ )
c[ A[ i] ] += 1 ;
for ( i = 1 ; i < k; i++ )
c[ i] = c[ i - 1 ] + c[ i] ;
for ( i = n - 1 ; i >= 0 ; i-- )
{
b[ c[ A[ i] ] - 1 ] = A[ i] ;
c[ A[ i] ] -= 1 ;
}
for ( i = 0 ; i < n; i++ )
A[ i] = b[ i] ;
free ( c) ;
free ( b) ;
}
void printArray ( int A[ ] , int n) {
int i = 0 ;
for ( i = 0 ; i < n; i++ ) {
printf ( "%4d" , A[ i] ) ;
}
printf ( "\n" ) ;
}
int main ( )
{
int A[ NUM] ;
int i;
for ( i = 0 ; i < NUM; i++ )
A[ i] = random ( MAXNUM) ;
printf ( "before sorting:\n" ) ;
printArray ( A, NUM) ;
countingSort ( A, NUM, MAXNUM) ;
printf ( "after sorting:\n" ) ;
printArray ( A, NUM) ;
return 0 ;
}
桶排序:
# include <stdio.h>
void main ( )
{
int a[ 11 ] , i, j, t;
for ( i= 0 ; i<= 10 ; i++ )
{
a[ i] = 0 ;
}
for ( i= 0 ; i< 5 ; i++ )
{
scanf ( "%d" , & t) ;
a[ t] ++ ;
}
for ( i= 0 ; i<= 10 ; i++ )
{
for ( j= 0 ; j< a[ i] ; j++ )
{
printf ( "%d" , i) ;
}
}
}
基数排序:
# include <stdio.h>
# define Max_ 10
# define RADIX_10 10
# define KEYNUM_31 10
void Show ( int arr[ ] , int n)
{
int i;
for ( i= 0 ; i< n; i++ )
printf ( "%d " , arr[ i] ) ;
printf ( "\n" ) ;
}
int GetNumInPos ( int num, int pos)
{
int temp = 1 ;
int i;
for ( i = 0 ; i < pos - 1 ; i++ )
temp *= 10 ;
return ( num / temp) % 10 ;
}
void RadixSort ( int * pDataArray, int iDataNum)
{ int i, pos, j, k;
int * radixArrays[ RADIX_10] ;
for ( i = 0 ; i < 10 ; i++ )
{
radixArrays[ i] = ( int * ) malloc ( sizeof ( int ) * ( iDataNum + 1 ) ) ;
radixArrays[ i] [ 0 ] = 0 ;
}
for ( pos = 1 ; pos <= KEYNUM_31; pos++ )
{
for ( i = 0 ; i < iDataNum; i++ )
{
int num = GetNumInPos ( pDataArray[ i] , pos) ;
int index = ++ radixArrays[ num] [ 0 ] ;
radixArrays[ num] [ index] = pDataArray[ i] ;
}
for ( i = 0 , j = 0 ; i < RADIX_10; i++ )
{
for ( k = 1 ; k <= radixArrays[ i] [ 0 ] ; k++ )
pDataArray[ j++ ] = radixArrays[ i] [ k] ;
radixArrays[ i] [ 0 ] = 0 ;
}
}
}
int main ( )
{
int arr_test[ Max_] = { 8 , 4 , 2 , 3 , 5 , 1 , 6 , 9 , 0 , 7 } ;
Show ( arr_test, Max_ ) ;
RadixSort ( arr_test, Max_) ;
Show ( arr_test, Max_ ) ;
return 0 ;
}
以上就是所有代码,希望同学们好好学习!!!