插入排序与希尔排序--C语言实现
来源:互联网 发布:零点壹网络 编辑:程序博客网 时间:2024/06/14 11:01
/* insert sort and shell sort
* nizqsut@163.com
*/
#include
#include
#include "fatal.h"
typedef int element_type;
/* 插入排序
* 进行第N趟排序时,第N-1趟已经排好序了
*/
static void
insert_sort( element_type a[], int n )
{
int j, p;
element_type tmp;
for ( p = 1; p < n; p++ ){
tmp = a[p];
for ( j = p; (j > 0) && (a[j - 1] > tmp); j-- ){
a[j] = a[j - 1];
}
a[j] = tmp;
}
}
/* 希尔排序 */
static void
shell_sort( element_type a[], int n )
{
int p, j, increment;
element_type tmp;
/* 使用shell增量 */
for ( increment = n / 2; increment > 0; increment /= 2 ){
/* 对每个增量使用插入排序 */
for ( p = increment; p < n; p++ ){
tmp = a[ p ];
/*for ( j = p; (j >= increment) && ( a[ j - increment] > tmp );
j -= increment ){
a[ j ] = a[j - increment];
}*/
for ( j = p; j >= increment; j -= increment )
if ( a[ j - increment] > tmp )
a[ j ] = a[j - increment];
else
break;
a[ j ] = tmp;
}
}
}
/************ The next is test functions ***************/
//#define get_array_size(array) ( sizeof(array) / sizeof(array[0]) )
#define D_COUNT (0x10000)
/* equal return 1, else return 0 */
static int
my_memcmp( element_type *mem1, element_type *mem2, int count )
{
int i;
for ( i = 0; i < count; i++ )
if ( *mem1++ != *mem2++ )
return 0;
return 1;
}
void
test_sort( void )
{
int i;
element_type *data4insert,*data4shell;
data4insert = malloc( D_COUNT * sizeof(element_type) );
data4shell = malloc( D_COUNT * sizeof(element_type) );
if ( !data4insert || !data4shell )
Error("Out of space!");
for ( i = 0; i < D_COUNT; i++ ){
/* rand()是个“伪”随机数函数*/
data4shell[i] = data4insert[i] = rand();
//data4shell[i] = rand();
}
/* 通过观测执行时间可以明显看出这两个排序算法时间性能相差甚远 */
insert_sort( data4insert, D_COUNT );
shell_sort( data4shell, D_COUNT );
i = my_memcmp( data4insert, data4shell, D_COUNT );
if ( i )
printf("\t------ sort result equal. ------\n");
else
printf("\t------ sort result not equal. ------\n");
free( data4insert );
free( data4shell );
return;
}
* nizqsut@163.com
*/
#include
#include
#include "fatal.h"
typedef int element_type;
/* 插入排序
* 进行第N趟排序时,第N-1趟已经排好序了
*/
static void
insert_sort( element_type a[], int n )
{
int j, p;
element_type tmp;
for ( p = 1; p < n; p++ ){
tmp = a[p];
for ( j = p; (j > 0) && (a[j - 1] > tmp); j-- ){
a[j] = a[j - 1];
}
a[j] = tmp;
}
}
/* 希尔排序 */
static void
shell_sort( element_type a[], int n )
{
int p, j, increment;
element_type tmp;
/* 使用shell增量 */
for ( increment = n / 2; increment > 0; increment /= 2 ){
/* 对每个增量使用插入排序 */
for ( p = increment; p < n; p++ ){
tmp = a[ p ];
/*for ( j = p; (j >= increment) && ( a[ j - increment] > tmp );
j -= increment ){
a[ j ] = a[j - increment];
}*/
for ( j = p; j >= increment; j -= increment )
if ( a[ j - increment] > tmp )
a[ j ] = a[j - increment];
else
break;
a[ j ] = tmp;
}
}
}
/************ The next is test functions ***************/
//#define get_array_size(array) ( sizeof(array) / sizeof(array[0]) )
#define D_COUNT (0x10000)
/* equal return 1, else return 0 */
static int
my_memcmp( element_type *mem1, element_type *mem2, int count )
{
int i;
for ( i = 0; i < count; i++ )
if ( *mem1++ != *mem2++ )
return 0;
return 1;
}
void
test_sort( void )
{
int i;
element_type *data4insert,*data4shell;
data4insert = malloc( D_COUNT * sizeof(element_type) );
data4shell = malloc( D_COUNT * sizeof(element_type) );
if ( !data4insert || !data4shell )
Error("Out of space!");
for ( i = 0; i < D_COUNT; i++ ){
/* rand()是个“伪”随机数函数*/
data4shell[i] = data4insert[i] = rand();
//data4shell[i] = rand();
}
/* 通过观测执行时间可以明显看出这两个排序算法时间性能相差甚远 */
insert_sort( data4insert, D_COUNT );
shell_sort( data4shell, D_COUNT );
i = my_memcmp( data4insert, data4shell, D_COUNT );
if ( i )
printf("\t------ sort result equal. ------\n");
else
printf("\t------ sort result not equal. ------\n");
free( data4insert );
free( data4shell );
return;
}
0
上一篇:u-boot启动代码分析一
下一篇:再读《TCP/IP详解 卷一:协议》
相关热门文章
- QEMU源码分析系列(二)
- 环形缓冲区的C语言实现...
- 传播最广的一篇SVM算法博文...
- C语言中的可变参数函数 三个点...
- 16道嵌入式C语言面试题(经典)...
- test123
- 编写安全代码——小心有符号数...
- 使用openssl api进行加密解密...
- 一段自己打印自己的c程序...
- sql relay的c++接口
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- 插入排序与希尔排序--C语言实现
- 插入排序/希尔排序/快速排序C语言实现
- C语言实现直接插入排序和希尔排序
- C语言实现插入排序与希尔排序与一些想法
- 排序 (插入排序,快速排序,希尔排序)数据结构与算法分析-C语言描述
- C语言实现希尔排序
- c语言实现希尔排序
- C语言实现希尔排序
- 希尔排序C语言实现
- 希尔排序-C语言实现
- 希尔排序c语言实现
- 希尔排序-c语言实现
- C语言实现排序算法---希尔排序
- (排序)用C语言实现的希尔排序(插入排序)
- C 插入排序 希尔排序
- C实现三种插入排序-简单插入排序、二分插入排序、希尔插入排序
- 插入排序与希尔排序
- 插入排序与希尔排序
- 分离链接法解决hash冲突问题(C语言实现)
- 开放定址法解决hash冲突问题(C语言实现)
- 数据结构一二三
- 优先队列--C语言实现
- u-boot启动代码分析一
- 插入排序与希尔排序--C语言实现
- 再读《TCP/IP详解 卷一:协议》
- 【第一课】【数学思想】创新班
- Linux内核稀奇古怪的宏
- 【总结】石门中学创新班2015.4.25
- (转)大小端和存储器对齐
- 在DOCKER中构建使用RUBY2.1及以上版本的镜像
- Stamp——邮票问题
- Read MIPS Run2nd MIPS cache(转)
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
哭腔潮红压鲤鱼乡
哭腔
奏腔下河东三十六哭
抖音上带着哭腔女声唱的说谎
鲤鱼乡 无力哭腔
绿川光哭腔h广播剧
绿川光哭腔全程高能广播剧
带有哭腔的有爆发力的台词
日本人评论双笙哭腔唱法
祝你呀生日快乐哭腔
抖音里赵四唱的哭腔歌曲
汉腾车主哭诉质量差
老外回国不适应哭诉
综英美总有鬼魂向她哭诉
哮喘传染
小儿哮喘
儿童哮喘
哮喘传染吗
心源性哮喘
哮喘病症状
咳嗽性哮喘
哮喘发作
狗狗哮喘
哮喘遗传
小孩哮喘
哮喘吧
哮喘用药
哮喘新疗法
哮喘喷雾剂
哮喘喷剂
哮喘遗传吗
哮喘喷雾
哮喘药物
哮喘的药
哮喘的原因
哮喘传染么
哮喘会传染
哮喘应注意
哮喘指南
早期哮喘
哮喘的