排序算法门外汉理解-Shell排序
2015-07-06 08:43
585 查看
#include <stdio.h>
/* 希尔排序
基本思想:希尔排序又称为缩小增量排序,对简单插入排序的优化。
(外部分组gap,组内部插入排序!
!
)
特点:一种不稳定的排序
*/
void ShellSort(int array[],int len){
int i,j;
int gap;// gap
int temp;
for (gap = len/2 ; gap >0 ; gap = gap/2){ //核心就是
array[j+gap]与 array[j]比較。直到gap=1
for (i = gap; i < len ; i++){ // i: gap ~ <len(i++) 4、3、2、1...
temp = array[i];
for (j = i - gap; j >=0; j-=gap) {// j: i-gap ~ >=0(j=j-gap)
if (temp < array[j]) {
array[j+gap] = array[j];
// 假设待插入元素<前面序列,则后移元素
}
else
break;
}
array[j+gap] = temp;
// 空位填上待插入元素就可以
}
}
}
int main(int argc,constchar * argv[])
{
int i =0;
int a[] = {5,4,9,8,7,6,0,1,3,2};
int len =sizeof(a)/sizeof(a[0]);
// 希尔排序
ShellSort(a, len);
for (i =0; i < len; i++) {
printf("%d ",a[i]);
}
printf("\n\n");
return0;
}
/* 希尔排序
基本思想:希尔排序又称为缩小增量排序,对简单插入排序的优化。
(外部分组gap,组内部插入排序!
!
)
特点:一种不稳定的排序
*/
void ShellSort(int array[],int len){
int i,j;
int gap;// gap
int temp;
for (gap = len/2 ; gap >0 ; gap = gap/2){ //核心就是
array[j+gap]与 array[j]比較。直到gap=1
for (i = gap; i < len ; i++){ // i: gap ~ <len(i++) 4、3、2、1...
temp = array[i];
for (j = i - gap; j >=0; j-=gap) {// j: i-gap ~ >=0(j=j-gap)
if (temp < array[j]) {
array[j+gap] = array[j];
// 假设待插入元素<前面序列,则后移元素
}
else
break;
}
array[j+gap] = temp;
// 空位填上待插入元素就可以
}
}
}
int main(int argc,constchar * argv[])
{
int i =0;
int a[] = {5,4,9,8,7,6,0,1,3,2};
int len =sizeof(a)/sizeof(a[0]);
// 希尔排序
ShellSort(a, len);
for (i =0; i < len; i++) {
printf("%d ",a[i]);
}
printf("\n\n");
return0;
}
相关文章推荐
- Shell脚本实现根据文件的修改时间来分类文件
- Shell中特殊的变量
- man ifconfig时提示:-bash: man: command not found
- man ifconfig时提示:-bash: man: command not found
- man ifconfig时提示:-bash: man: command not found
- linux笔记(2)文件搜索与bash快捷键
- Shell中变量的使用
- Shell常用招式大全之入门篇
- shell中的awk 和sed及grep
- shell 调试
- xshell的上传和下载命令
- Linux - Shell基本命令
- shell学习----小结
- shell学习三十九天----内建命令
- shell学习三十八天----执行顺序和eval
- 禁止右键git bash
- Shell的输入输出
- Shell入门第一课
- shell中的函数参数
- CentOS6.5安装Tab增强版:bash-completion