实验10 排序
1、请设计直接插入排序算法函数void insertSort(int a[],int n),对a[1]…a[n]进行升序排序。并测试在不同数据规模下的排序效率。
#include "Arrayio.h"
#define N 500000
void insertSort ( int a[ ] , int n)
{
int i, j;
for ( i= 2 ; i<= n; i++ )
{
a[ 0 ] = a[ i] ;
j= i- 1 ;
while ( a[ j] > a[ 0 ] )
{
a[ j+ 1 ] = a[ j] ;
j-- ;
}
a[ j+ 1 ] = a[ 0 ] ;
}
}
int main ( )
{
int a[ N+ 1 ] , n;
printf ( "数据初始化...\n" ) ;
n= readData ( a, N, "out.txt" ) ;
printf ( "%d个数据排序中...\n" , n) ;
insertSort ( a, n) ;
saveData ( a, n, "out.txt" ) ;
output ( a, 10 ) ;
printf ( "排序结束,排序结果保存在out.txt文件中。\n" ) ;
return 0 ;
}
2、请设计二分插入排序算法函数void binInsertSort(int a[],int n),对a[1]…a[n]进行升序排序。并测试在不同数据规模下的排序效率。
#include "Arrayio.h"
#define N 50000
void binInsertSort ( int a[ ] , int n)
{
int mid, left, right, i, j;
for ( i= 2 ; i<= n; i++ )
{
left= 1 ;
right= i- 1 ;
while ( left<= right)
{
mid= ( left+ right) / 2 ;
if ( a[ i] < a[ mid] )
right= mid- 1 ;
else
left= mid+ 1 ;
}
a[ 0 ] = a[ i] ;
for ( j= i- 1 ; j>= left; j-- )
a[ j+ 1 ] = a[ j] ;
a[ left] = a[ 0 ] ;
}
}
int main ( )
{
int a[ N+ 1 ] , n;
printf ( "数据初始化...\n" ) ;
n= readData ( a, N, "data1.txt" ) ;
printf ( "%d个数据排序中...\n" , n) ;
binInsertSort ( a, n) ;
saveData ( a, n, "out.txt" ) ;
output ( a, n) ;
printf ( "排序结束,排序结果保存在out.txt文件中。\n" ) ;
return 0 ;
}
3、请设计shell排序算法函数void shellSort(int a[],int n),对a[1]…a[n]进行升序排序。并测试在不同数据规模下的排序效率。
#include "Arrayio.h"
#define N 500000
void shellSort ( int a[ ] , int n)
{
int i, j, d;
d= n/ 2 ;
while ( d>= 1 )
{
for ( i= d+ 1 ;