`

shell排序算法

阅读更多
    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排序算法详解及其在Simotion中的应用** Shell排序,由美国计算机科学家Donald Shell于1959年提出,是一种改进的插入排序算法,通过设置一个间隔序列来减少比较和交换的操作,从而提高了排序的效率。它巧妙地...

    C 冒泡Shell排序算法

    本文将详细介绍C语言实现的冒泡Shell排序算法。 首先,冒泡排序(Bubble Sort)是一种简单直观的排序算法。它重复地遍历待排序的序列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历序列的工作是...

    C经典算法之Shell 排序法 - 改良的插入排序

    #### Shell排序算法步骤详解 1. **初始化**:首先定义一个数组`number[]`用于存储待排序的数据,并且使用`srand(time(NULL))`设置随机种子,以便生成不同的随机数序列来进行测试。 2. **设置初始间隔(Gap)**:...

    C++的Shell排序算法代码学习

    ### C++中的Shell排序算法详解 #### 一、Shell排序简介 Shell排序是插入排序的一种扩展,由Donald Shell于1959年提出。它通过将原始数组分割成多个子序列,分别对这些子序列进行插入排序来提高插入排序的效率。随着...

    shell 排序算法c

    shell排序的c语言算法 很好很强大很高效很教授的算法

    04_shell_sort_shell排序算法_

    Shell排序的核心思想是“分治法”。它首先将待排序的序列按照一定的间隔(称为H步长)分成若干个子序列,对每个子序列进行插入排序,然后逐渐减小步长,再进行同样的操作,直到步长为1,即进行一次普通的插入排序。...

    直接插入排序、折半排序、shell排序、冒泡排序、快速排序、选择排序、堆排序的实现

    数据结构(c语言版)严蔚敏 吴伟民编著 中直接插入排序、折半排序、shell排序、冒泡排序、快速排序、选择排序、堆排序的实现、归并排序,使用c语言实现

    C语言基本排序算法之shell排序实例

    下面是一个使用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 &gt; 0; gap = gap/2) { for...

    shell排序shellsort

    数据结构课程排序算法中的经典shell排序

    shell排序算法的一

    这个试用shell实现的排序算法间大名了

    java实现的shell排序快速排序归并排序堆排序

    本篇将详细介绍标题所提及的四种排序算法:Shell排序、快速排序、归并排序以及堆排序。 1. **Shell排序**: Shell排序是一种改进的插入排序,由Donald Shell于1959年提出。它通过设置一个间隔序列,使得数组中的...

    排序算法汇总(shell排序 归并排序 选择排序 快速排序 堆排序 冒泡排序 插入排序)

    这里我们汇总了七种常见的排序算法:Shell排序、归并排序、选择排序、快速排序、堆排序、冒泡排序和插入排序。每种算法都有其独特的特点和适用场景,下面将逐一详细介绍。 1. **Shell排序**:由Donald Shell提出,...

    shell排序 (工程)

    1. **初始化**:首先,我们需要创建一个项目,设定项目的目标是实现Shell排序算法。在编程环境中,这可能意味着创建一个新的代码文件或工程,并引入必要的库或模块。 2. **间隔序列**:选择一个初始间隔`h`,通常是...

    常见经典排序算法(C语言)1希尔排序 二分插入法 直接插入法 带哨兵的直接排序法 冒泡排序 选择排序 快速排序 堆排序.docx

    常见的经典排序算法有希尔排序、二分插入法、直接插入法、带哨兵的直接排序法、冒泡排序、选择排序、快速排序、堆排序等。 一、希尔排序(Shell 排序法) 希尔排序法,又称宿小增量排序,是 1959 年由 D.L.Shell ...

    Shell排序算法在Simotion中的实现.zip

    Shell排序是一种基于插入排序的算法,由Donald Shell于1959年提出。它通过将待排序的元素按一定的间隔分组...通过合理的代码组织和优化,可以在Simotion中实现高效的Shell排序算法,用于处理运动控制中的数据排序问题。

    Shell排序

    `ShellSort.java`文件很可能包含了实现Shell排序算法的Java代码,通常会包含以下关键部分: - `gap`变量表示当前的增量。 - 使用嵌套循环结构,外层循环控制增量的变化,内层循环则负责按增量进行子序列的插入排序...

    实现各种排序算法并分析与比较.rar_shell排序_各种排序_各种排序算法_堆排序_快速排序

    本文将深入探讨标题和描述中提及的几种排序算法:直接插入排序、希尔排序(SHELL排序)、冒泡排序、快速排序、简单选择排序、堆排序以及归并排序,并对它们进行分析和比较。 1. **直接插入排序**: - 直接插入排序...

    基于Python实现的K-Shell节点排序算法

    基于python-2.7实现的K-Shell节点排序算法,算法结果输出每个节点K值。

    shell算法shell算法shell算法

    shell排序shell排序shell排序shell排序shell排序shell排序shell排序

    JAVA经典算法各种排序算法

    Shell 排序法 - 改良的插入排序 Shaker 排序法 - 改良的氣泡排序 Heap 排序法 - 改良的選擇排序 快速排序法(一) 快速排序法(二) 快速排序法(三) 合併排序法 基數排序法 搜尋 循序搜尋法(使用衛兵...

Global site tag (gtag.js) - Google Analytics