shell排序算法严格来说基于插入排序的思想,其又称为希尔排序或者缩小增量排序。shell排序算法的排序流程如下:
1)将n个元素的数组分为n/2个数据序列,第一个数据和第n/2+1个数据为一对
2)一次循环使每一个序列对应排好顺序
3)然后,再变为n/4个序列,再次排序
4)不断重复上述过程
例如如下数据排序
初始数据 127 118 105 101 112 100
一次排序 101 112 100 127 118 105
二次排序 100 101 105 112 118 127
第一次排序 首先数组分为6/2=3 3个元素一组
第二次排序 6/4=1(取整数) 每个逐个数据比较,采用插入算法进行
public class ShellSort {
public static int count = 0;
public static void main(String[] args) {
int[] data = new int[] { 5, 3, 6, 2 };
print(data);
shellSort(data);
print(data);
}
public static void shellSort(int[] data) {
// 计算出最大的h值
int h = 1;
System.out.println(data.length / 3);
while (h <= data.length / 3) {
h = h * 3 + 1;
}
while (h > 0) {
for (int i = h; i < data.length; i += h) {
if (data[i] < data[i - h]) {
int tmp = data[i];
int j = i - h;
while (j >= 0 && data[j] > tmp) {
data[j + h] = data[j];
j -= h;
}
data[j + h] = tmp;
print(data);
}
}
// 计算出下一个h值
h = (h - 1) / 3;
}
}
public static void print(int[] data) {
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + "\t");
}
System.out.println();
}
}
分享到:
相关推荐
**Shell排序算法详解及其在Simotion中的应用** Shell排序,由美国计算机科学家Donald Shell于1959年提出,是一种改进的插入排序算法,通过设置一个间隔序列来减少比较和交换的操作,从而提高了排序的效率。它巧妙地...
本文将详细介绍C语言实现的冒泡Shell排序算法。 首先,冒泡排序(Bubble Sort)是一种简单直观的排序算法。它重复地遍历待排序的序列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历序列的工作是...
#### Shell排序算法步骤详解 1. **初始化**:首先定义一个数组`number[]`用于存储待排序的数据,并且使用`srand(time(NULL))`设置随机种子,以便生成不同的随机数序列来进行测试。 2. **设置初始间隔(Gap)**:...
### C++中的Shell排序算法详解 #### 一、Shell排序简介 Shell排序是插入排序的一种扩展,由Donald Shell于1959年提出。它通过将原始数组分割成多个子序列,分别对这些子序列进行插入排序来提高插入排序的效率。随着...
shell排序的c语言算法 很好很强大很高效很教授的算法
Shell排序的核心思想是“分治法”。它首先将待排序的序列按照一定的间隔(称为H步长)分成若干个子序列,对每个子序列进行插入排序,然后逐渐减小步长,再进行同样的操作,直到步长为1,即进行一次普通的插入排序。...
数据结构(c语言版)严蔚敏 吴伟民编著 中直接插入排序、折半排序、shell排序、冒泡排序、快速排序、选择排序、堆排序的实现、归并排序,使用c语言实现
下面是一个使用C语言实现的shell排序算法的示例代码: ```c #ifndef SHELL_SORT_H #define SHELL_SORT_H #include "typedef.h" void Shell_sort(T* a, int n){ for(int gap = n; gap > 0; gap = gap/2) { for...
数据结构课程排序算法中的经典shell排序
这个试用shell实现的排序算法间大名了
本篇将详细介绍标题所提及的四种排序算法:Shell排序、快速排序、归并排序以及堆排序。 1. **Shell排序**: Shell排序是一种改进的插入排序,由Donald Shell于1959年提出。它通过设置一个间隔序列,使得数组中的...
这里我们汇总了七种常见的排序算法:Shell排序、归并排序、选择排序、快速排序、堆排序、冒泡排序和插入排序。每种算法都有其独特的特点和适用场景,下面将逐一详细介绍。 1. **Shell排序**:由Donald Shell提出,...
1. **初始化**:首先,我们需要创建一个项目,设定项目的目标是实现Shell排序算法。在编程环境中,这可能意味着创建一个新的代码文件或工程,并引入必要的库或模块。 2. **间隔序列**:选择一个初始间隔`h`,通常是...
常见的经典排序算法有希尔排序、二分插入法、直接插入法、带哨兵的直接排序法、冒泡排序、选择排序、快速排序、堆排序等。 一、希尔排序(Shell 排序法) 希尔排序法,又称宿小增量排序,是 1959 年由 D.L.Shell ...
Shell排序是一种基于插入排序的算法,由Donald Shell于1959年提出。它通过将待排序的元素按一定的间隔分组...通过合理的代码组织和优化,可以在Simotion中实现高效的Shell排序算法,用于处理运动控制中的数据排序问题。
`ShellSort.java`文件很可能包含了实现Shell排序算法的Java代码,通常会包含以下关键部分: - `gap`变量表示当前的增量。 - 使用嵌套循环结构,外层循环控制增量的变化,内层循环则负责按增量进行子序列的插入排序...
本文将深入探讨标题和描述中提及的几种排序算法:直接插入排序、希尔排序(SHELL排序)、冒泡排序、快速排序、简单选择排序、堆排序以及归并排序,并对它们进行分析和比较。 1. **直接插入排序**: - 直接插入排序...
基于python-2.7实现的K-Shell节点排序算法,算法结果输出每个节点K值。
shell排序shell排序shell排序shell排序shell排序shell排序shell排序
Shell 排序法 - 改良的插入排序 Shaker 排序法 - 改良的氣泡排序 Heap 排序法 - 改良的選擇排序 快速排序法(一) 快速排序法(二) 快速排序法(三) 合併排序法 基數排序法 搜尋 循序搜尋法(使用衛兵...