希尔排序
来源:互联网 发布:plsql 加载sql文件乱码 编辑:程序博客网 时间:2024/04/29 10:09
1, 希尔排序是一种O(N^1.25)(公认的,没有数学证明),好于O(N*N)。
2, 希尔排序可以说就是插入排序的增量模式,最小增量必须有1。也可以理解为对数列的多次分组插入排序。分组间隔为1的情况,就是插入排序。所以希尔排序的分组间隔的选择关系到排序算法的优劣。
3, 希尔排序是一种不稳定的排序算法。
#include "stdafx.h"
#include "stdio.h"
void InsertSort(int* data, int length, int step)
{
for( int i = step; i < length; i++ )
{
int temp = *(data+i);
for( int j = i; j > 0; j -= step )
{
if( *(data+j-step) > temp )
*(data+j) = *(data+j-step);
else
break;
}
*(data+j) = temp;
}
}
//void ShellSort(int A[], int count)
//{
// int i, j, increment;
// int temp;
//
// for( increment = count / 2; increment > 0; increment /= 2 )
// {
// for( i = increment; i < count; i++ )
// {
// temp = A[i];
// for( j = i; j >= increment; j -= increment )
// {
// if( A[j-increment] > temp )
// A[j] = A[j-increment];
// else
// break;
// }
// A[j] = temp;
// }
// }
//}
void ShellSort(int A[], int count)
{
int i, j, increment;
int temp;
for( increment = count / 2; increment > 0; increment /= 2 )
{
InsertSort(A, count, increment);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int A[] = {34, 8, 64, 51, 32, 21};
int count = sizeof(A) / sizeof(A[0]);
//for( int i = 1; i < count; i++ )
//{
// int temp = A[i];
// for( int j = i; j > 0; j-- )
// {
// if( temp < A[j-1] )
// A[j] = A[j-1];
// else
// break;
// }
// A[j] = temp;
//}
//InsertSort(A, count, 1);
ShellSort(A, count);
for( int i = 0; i < count; i++ )
printf("%d ", A[i]);
return 0;
}
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 关于Combuilder公司
- komodo ide::lua 编辑器推荐
- 获取PE文件结构的两种方法
- asp.net2.0学习历程 菜鸟到中级程序员的飞跃
- petshop学习笔记(4) - 缓存
- 希尔排序
- C++随机数生成器 V2
- Symbian中singleton的实现(多线程)
- 在Symbian OS平台上移植C语言工程的方法
- 移动开发中的字符集转换问题
- 在手机平台上建立TCP/IP通信办法点滴
- 基于Symbian OS的通讯录操作总结
- 站着就是成功!
- 为什么你要骗我呢?