#include <stdio.h>
#include <conio.h>
#define N 10
int main( void )
{
int i, j, temp ;
int a[N] = {0,1,2,3,4,5,6,7,8,9};
// 冒泡排序法進行排序
for( i = 0; i < N - 1; i++ ){
for( j = 0; j < N-i-1; j++ ){
if( a[i] < a[j] ){
temp = a[i] ;
a[i] = a[j] ;
a[j] = temp ;
}
}
}//第一個for
printf("你是入的十個數是:/n")
;
for( i = 0; i < N; i++ ){
printf("%d ",a[i] ) ;
}
getch() ;
return 0 ;
}
下面的是選擇排序法,比冒泡排序法的效率高:
#include <stdio.h>
#include <conio.h>
#define N 10
int main( void )
{
int i, j, k, temp ;
int a[N] = {0,1,2,3,4,5,6,7,8,9};
// 選擇排序法進行排序
for( i = 0; i < N - 1; i++ ){
k = i ;
for( j = i + 1; j < N; j++ ){
if( a[k] < a[j] ){
k = j ;
}
temp = a[i] ;
a[i] = a[k] ;
a[k] = temp ;
}
}//第一個for
printf("你是入的十個數是:/n")
;
for( i = 0; i < N; i++ ){
printf("%d ",a[i] ) ;
}
getch() ;
return 0 ;
}
下面的是插入排序法,比冒泡排序法和選擇排序法的效率都要高:
#include <stdio.h>
#include <conio.h>
#define N 10
int main( void )
{
int i, j, key, temp ;
int a[N] = {0,1,2,3,4,5,6,7,8,9};
// 插入排序法進行排序
for( i = 1; i < N ; i++ ){
key = a[i] ;
for( j = i - 1; j >= 0; j-- ){
if( a[j] < key ){
a[j+1] = a[j] ;
}
}
a[j+1] = key ;
}//第一個for
printf("你是入的十個數是:/n")
;
for( i = 0; i < N; i++ ){
printf("%d ",a[i] ) ;
}
getch() ;
return 0 ;
}
下面的是歸併排序法,我是在看了《演算法導論》之後才寫的,我自己寫不出來。代碼寫出來很簡單,比其它一些書上的簡單多了。歸併排序法的效率是這四個排序法
中效率最高的:
#include <stdio.h>
#include <conio.h>
#define N 10
void merge_sort( int *a,
int p, int q, int r )
{
int i, j, k, m, n ;
int array1[N], array2[N] ;
// m和n分別是建立立的兩個數組中
// 元素的個數
m = q - p + 1 ;
n = r - q ;
// 先把數組a[N],中的元素放進
// 建立立的兩個數組中
for( i = 0; i < m; i++ ){
array1[i] = *( a + p + i ) ;
}
for( j = 0; j < n; j++ ){
array2[j] = *( a + q + j +1 ) ;
}
i = j = 0 ;
k = p ; // k 不能被初始化為 0
// 開始歸併
while( i < m && j < n ){
if( array1[i] > array2[j] ){
*( a + k ) = array1[i] ;
++ k ;
++ i ;
}
else{
*( a + k ) = array2[j] ;
++ k ;
++ j ;
}
}
// 歸併每個數組剩下的元素
while( i < m ){
*( a + k ) = array1[i] ;
++ k ;
++ i ;
}
while( j < n ){
*( a + k ) = array2[j] ;
++ k ;
++ j ;
}
}
void merge( int *a, int p,
int r )
{
int q ;
// p >= r的情況就是要排序的元素只有一個,
// 也就是說,它已經被排好了
if( p < r ){
q = (p + r)/2 ;
merge( a, p, q ) ;
merge( a, q + 1, r );
merge_sort( a, p, q, r );
}
}// merge
int main( void )
{
int i, j, key, temp ;
int a[N] = {0,1,2,3,4,5,6,7,8,9};
merge( a, 0, 9) ;
printf("你是入的十個數是:/n") ;
for( i = 0; i < 10; i++ ){
printf("%d ",a[i] ) ;
}
getch() ;
return 0 ;
}
http://hi.baidu.com/linjian257/blog/item/a51e2b4b24727bfb82025cae.html