希尔排序 :
(缩小增量排序)
排序原理:设置一个增量n,将所有下标为增量倍数的值放入到一个组中,对该组进行排序,然后重复这个方法,取增量m (m < n ,后面所取的增量应该递减),查找到增量m倍数的值进行排序。 希尔排序属于插入排序,是将整个有序序列分割成若干小的子序列分别进行插入排序。
(注:增量应该小于该数组的长度,一般取 length / 2 的整数值,有关增量的取值, 这里不进行讨论)
|
public class ShellSort { //shell sort: 按增量取值分组排序。 public void shellSortFun(int[] arrs) { if (arrs != null && arrs.length != 0) { int increment = arrs.length / 2; boolean flag = true; while (flag) { for (int i = 0 ; i < increment ; i ++) { for (int j = 0 ; j < arrs.length; j++) { if ((j + increment) < arrs.length) { if (arrs[j] - arrs[j + increment] > 0) { int tmp = 0; tmp = arrs[j]; arrs[j] = arrs[j + increment]; arrs[j + increment] = tmp; } } } } increment = increment / 2; if (increment == 1) { break; } } for (int i = 1 ; i < arrs.length; i++) { int tmp = arrs[i]; int index = i; while (index > 0 && (tmp < arrs[index - 1])) { arrs[index] = arrs[index - 1]; index --; } arrs[index] = tmp; } for (int arr : arrs) { System.out.println(arr); } } } public static void main(String[] args) { ShellSort ss = new ShellSort(); Random rd = new Random(); int[] arrs = new int[100]; for (int i = 0 ; i < 100; i++) { arrs[i] = rd.nextInt(); } // int[] arrs = new int[]{3,2,1,5,6,9,8,7,-2,10};//49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 1 ss.shellSortFun(arrs); } }
下面这个动画演示能清晰的看出希尔排序是怎样运行的 :
相关推荐
直接排序法、折半插入法、希尔排序法和快速排序法是计算机科学中常见的排序算法,它们在数据处理和算法理解上都具有重要的地位。这些排序算法的C语言实现为初学者提供了很好的学习材料,特别是在VC++6.0环境下进行...
希尔排序法是计算机科学领域中一种重要的排序算法,它由美国计算机科学家Donald Shell于1959年提出,因此得名希尔排序。希尔排序是一种基于插入排序的改进算法,通过将待排序序列分为若干个子序列进行独立排序来提高...
下面将详细讲解这7种排序算法:快速排序、归并排序、插入排序、选择排序、冒泡排序、堆排序以及希尔排序。 1. **快速排序**:由C.A.R. Hoare提出的,采用分治策略。基本思想是选取一个基准元素,通过一趟排序将待...
该程序是我写的博客“一起talk C栗子吧(第二十八回:C语言实例--希尔排序)”的配套程序,共享给大家使用
本文主要探讨了几种常见的C++排序方法,包括冒泡排序、选择排序、快速排序和希尔排序。 首先,冒泡排序是一种简单直观的排序算法。它的基本思想是通过重复遍历待排序的序列,比较相邻元素并交换位置,使得较大的...
希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的元素按照一定的间隔分组,对每组进行插入排序,然后逐渐减小间隔,直到间隔为1,此时整个序列视为...
本文将深入探讨Java编程语言中实现的七种主要排序算法:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序以及归并排序。每种算法都有其独特性,适用于不同的场景和数据特性。 1. **直接插入排序**:...
这里我们关注的是六种经典的排序算法:快速排序、选择排序、冒泡排序、希尔排序、插入排序以及懒人排序。这六种算法都是使用C语言实现的,因此对C编程有一定的基础要求。 1. **快速排序**:由英国计算机科学家C.A.R...
希尔排序:其实就是用步长控制的插入排序,希尔排序通过加大插入排序中元素之间的间隔,并在这些有间隔的元素中进行插入排序,从而让数据项可以大幅度移动,这样的方式可以使每次移动之后的数据离他们在最终序列中的...
10. **希尔排序**:希尔排序是对插入排序的改进,通过设置间隔序列来减少元素的移动次数。其时间复杂度取决于间隔序列的选择,一般认为是O(n^(3/2))。 在Vue.js中实现这些排序算法,可以帮助开发者更好地理解算法...
printf("\t7: 希尔排序\n"); printf("\t***************************\n"); scanf("%d",&i); //输入整数1-7,选择排序方式 switch (i){ case 1: InsertSort(R); break; //值为1,直接插入排序 case 2: ...
本文将深入探讨标题中提到的几种基于比较的排序算法:选择排序、插入排序、归并排序、快速排序、堆排序、冒泡排序以及希尔排序。 1. **选择排序(Selection Sort)**: - 基本思想:在未排序的序列中找到最小(或...
根据提供的文件信息,我们可以深入探讨几种经典的排序算法:冒泡排序、直接插入排序、快速排序以及希尔排序。这些算法在数据结构与算法课程中是非常重要的基础内容,它们各自有着独特的特性和应用场景。 ### 1. ...
常见的经典排序算法有希尔排序、二分插入法、直接插入法、带哨兵的直接排序法、冒泡排序、选择排序、快速排序、堆排序等。 一、希尔排序(Shell 排序法) 希尔排序法,又称宿小增量排序,是 1959 年由 D.L.Shell ...
本篇文章将详细探讨基数排序、归并排序、堆排序、快速排序以及希尔排序这五种常见的排序算法,理解它们的基本思想以及实现方式。 1. **基数排序**: - **基本思想**:基数排序是一种非比较型整数排序算法,其原理...
希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一个增量序列分成若干子序列,然后对每个子序列进行插入排序,最后逐步减小增量,直至增量...
希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一个增量序列分成若干个子序列,然后分别对子序列进行插入排序,最后减小增量,再进行排序...
python数据结构与算法分析,希尔排序法实现,希尔排序.py
例如,插入排序和选择排序适合小规模数据,冒泡排序简单但效率低,希尔排序对大规模数据有优势,归并排序稳定但需要额外空间,快速排序在大多数情况下高效。在编程实践中,根据具体需求选择合适的排序算法是非常重要...