常用算法之希尔排序
2018-03-11 10:57
253 查看
希尔排序是对直接插入排序的改进
改进的地方:将按一定的规模分成几个小组,再每个小组中来分别进行直接插入排序
希尔排序的基本思想:按照一定的分组规模,将数组分成几个小组,分别对数组进行插入排序,一般分组规模是按照当前数组的长度/2来获取的
希尔排序的实现方法:
1.按照将数组/2的规模来分组,得到的数是几,那么也就意味着,需要分别进行几次插入排序
2.组分好之后,需要确定每组的首元素,之后才能确定每组的其他元素。
3.将每组的除首元素之外的元素跟他之前的数字比较,若小于前面的数,那么前面的数后移,后面的数前移。
实现代码:
package sort;
//希尔排序
//思想:将数组按照一定的增量来划分成不同的组
//不同的组在自己的组内进行插入排序
//增量按照一定的规则来逐渐的递减
public class shell {
public static void sort(int[] a){
int length = a.length;
int step = length/2;
//确定遍历组数
for(;step>0;step/=2){
//确定每组的首位成员
for(int i = 0;i<length/2;i++){
//确定每组数除了首位成员的每位成员
for(int j=i+step;j<length;j+=step){
//让每组数的每个成员跟它之前的数进行比较
for(int k=j-step;k>=0;k-=step){
if(a[k+step]<a[k]){
int temp = a[k+step];
a[k+step] = a[k];
a[k] = temp;
}
}
}
}
}
}
public static void main(String[] args) {
int[] a = {5,4,3,2,1,0};
sort(a);
for(int i:a){
System.out.println(i);
}
971b
}
}
改进的地方:将按一定的规模分成几个小组,再每个小组中来分别进行直接插入排序
希尔排序的基本思想:按照一定的分组规模,将数组分成几个小组,分别对数组进行插入排序,一般分组规模是按照当前数组的长度/2来获取的
希尔排序的实现方法:
1.按照将数组/2的规模来分组,得到的数是几,那么也就意味着,需要分别进行几次插入排序
2.组分好之后,需要确定每组的首元素,之后才能确定每组的其他元素。
3.将每组的除首元素之外的元素跟他之前的数字比较,若小于前面的数,那么前面的数后移,后面的数前移。
实现代码:
package sort;
//希尔排序
//思想:将数组按照一定的增量来划分成不同的组
//不同的组在自己的组内进行插入排序
//增量按照一定的规则来逐渐的递减
public class shell {
public static void sort(int[] a){
int length = a.length;
int step = length/2;
//确定遍历组数
for(;step>0;step/=2){
//确定每组的首位成员
for(int i = 0;i<length/2;i++){
//确定每组数除了首位成员的每位成员
for(int j=i+step;j<length;j+=step){
//让每组数的每个成员跟它之前的数进行比较
for(int k=j-step;k>=0;k-=step){
if(a[k+step]<a[k]){
int temp = a[k+step];
a[k+step] = a[k];
a[k] = temp;
}
}
}
}
}
}
public static void main(String[] args) {
int[] a = {5,4,3,2,1,0};
sort(a);
for(int i:a){
System.out.println(i);
}
971b
}
}
相关文章推荐
- Java常用排序算法之希尔排序
- 算法分析中最常用的几种排序算法(插入排序、希尔排序、冒泡排序、选择排序、快速排序,归并排序)C 语言版
- 常用算法——希尔排序(Shell Sort)
- 【数据结构与算法】【排序】希尔排序的代码实现
- 特征选择常用算法综述
- 常用 大数据量、海量数据处理 方法 / 算法总结
- 五大常用算法——分治法,动态规划,回溯法,分支界限法,贪心算法 2015-06-08 16:00 50人阅读 评论(0) 收藏
- 负载均衡的常用算法
- 常用25个算法
- [Python-*-算法]希尔排序
- 常用的内存管理算法的简要介绍
- STL中的常用算法
- Java 常用算法 插入,冒泡,快速排序大放送
- 五大常用算法——回溯法
- 常用算法——机器寻迹
- leetcode中常用的算法简介
- 视觉直观感受7种常用算法
- 五类常用算法(转)
- 常用算法大全-分枝定界
- 数据结构常用算法实现print