对int[] sorts = { 20, 9, 4, 7, 2, 6, 8, 1 };进行排序
package com.tao.test;
/**
* 排序之初允许数据元素做较大的移动,而当数据元素接近目的地时, 再做较小的移动。这样做可以使排序过程更加快。
*
*/
public class TestShellSort {
public static void main(String[] args) {
int[] sorts = new int[] { 20, 9, 4, 7, 2, 6, 8, 1 };
TestShellSort tss = new TestShellSort();
tss.shellSort(sorts);
sorts = new int[] { 20, 9, 4, 7, 2, 6, 8, 1 };
System.out.println("=================");
tss.ss(sorts);
}
/**
* 书本中的希尔排序法
*
* @param sorts
*/
public void shellSort(int[] sorts) {
int i, j, n = sorts.length, jump = n / 2;
while (jump > 0) {
for (i = jump; i <= n; i++) {
j = i - jump; // 0++
while (j > 0) {
if (sorts[j - 1] > sorts[j - 1 + jump]) {
int temp = sorts[j - 1];
sorts[j - 1] = sorts[j - 1 + jump];
sorts[j - 1 + jump] = temp;
j = j - jump;
} else {
j = -1;
}
this.output(sorts);
}
}
System.out.println("jump = " + jump);
jump = jump / 2;
}
}
/**
* 我写的希乐排序法
*
* @param sorts
*/
public void ss(int[] sorts) {
int n = sorts.length, jump = n / 2;
while (jump > 0) {
for (int i = 0; i < n - jump; i++) {
if (sorts[i] > sorts[i + jump]) {
int temp = sorts[i];
sorts[i] = sorts[i + jump];
sorts[i + jump] = temp;
}
this.output(sorts);
}
System.out.println(jump);
jump /= 2;
}
}
/**
* 用于输出信息
*
* @param sorts
*/
public void output(int[] sorts) {
for (int i = 0; i < sorts.length; i++) {
System.out.print(" " + sorts[i]);
}
System.out.println();
}
}
分享到:
相关推荐
下面将详细讲解这7种排序算法:快速排序、归并排序、插入排序、选择排序、冒泡排序、堆排序以及希尔排序。 1. **快速排序**:由C.A.R. Hoare提出的,采用分治策略。基本思想是选取一个基准元素,通过一趟排序将待...
### 希尔排序法(希尔插入排序,希尔交换排序) #### 一、希尔排序法简介 希尔排序法是计算机科学领域中一种重要的排序算法,它由美国计算机科学家Donald Shell于1959年提出,因此得名希尔排序。希尔排序是一种...
直接排序法、折半插入法、希尔排序法和快速排序法是计算机科学中常见的排序算法,它们在数据处理和算法理解上都具有重要的地位。这些排序算法的C语言实现为初学者提供了很好的学习材料,特别是在VC++6.0环境下进行...
5. 希尔排序:插入排序的优化版本,通过设置间隔序列来减少元素的移动次数。时间复杂度在最好情况下接近O(n),但最坏情况仍为O(n^2)。 6. 快速排序:采用分治策略,选取一个基准元素,将序列分为两部分,一部分小于...
7. 希尔排序:改进的插入排序,时间复杂度介于O(n)到O(n^2)之间。 8. 计数排序、桶排序和基数排序:非比较型排序,适用于特定场景。 三、搜索算法 搜索算法用于在数据结构中查找特定元素: 1. 线性搜索:最简单的...
本资料"参考资料-【排序法考核工具】岗位评价中排序法的应用.zip"似乎着重于将排序法应用于岗位评价,这可能是为了更系统、公正地对员工绩效或职位价值进行排序。 排序算法有很多种,如冒泡排序、插入排序、选择...
本文将深入探讨标题中提到的几种基于比较的排序算法:选择排序、插入排序、归并排序、快速排序、堆排序、冒泡排序以及希尔排序。 1. **选择排序(Selection Sort)**: - 基本思想:在未排序的序列中找到最小(或...
该程序是我写的博客“一起talk C栗子吧(第二十八回:C语言实例--希尔排序)”的配套程序,共享给大家使用
希尔排序的时间复杂度通常在O(n^(3/2))左右。 5. **插入排序**:插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序...
在实现希尔排序时,常见的增量序列有Hibbard序列、Sedgewick序列、Shellsort 3/2序列等。选择不同的序列会影响排序的速度和效果。 希尔排序源代码的关键部分通常包括以下函数: 1. `shell_sort()`:主函数,调用...
2. 稳定排序法 3. 非稳定排序法 4. 内部排序 5. 外部排序 6. 插入排序 7. 交换排序 8. 选择排序 9. 堆 10. 大根堆 11. 小根堆 12. 堆排序 13. 筛选 14. 归并 15. 归并排序 16. 基数排序 17. 链式基数排序 18. 外部...
希尔排序:其实就是用步长控制的插入排序,希尔排序通过加大插入排序中元素之间的间隔,并在这些有间隔的元素中进行插入排序,从而让数据项可以大幅度移动,这样的方式可以使每次移动之后的数据离他们在最终序列中的...
4. 希尔排序:将待排序的元素分为多个子序列,使得每个子序列的元素个数相对较少,对各个子序列分别进行直接插入排序。 5. 堆排序:使用堆数据结构对元素进行排序。 6. 归并排序:将待排序的元素分为两个子序列,对...
希尔排序法的基本思想是将待排序的序列分成若干个小组,每组进行插入排序,然后逐步合并小组,直到整个序列有序。 希尔排序法的时间复杂度为 O(n log n),空间复杂度为 O(1)。希尔排序法的优点是快速稳定,缺点是...
- **希尔排序**:最佳情况下为O(nlogn),最坏情况下为O(n^(3/2))。 综上所述,这几种排序算法各有特点,适用于不同的场景。例如,当处理规模较小的数据时,可以直接使用插入排序;而对于大规模数据集,快速排序通常...
10. **希尔排序**:希尔排序是对插入排序的改进,通过设置间隔序列来减少元素的移动次数。其时间复杂度取决于间隔序列的选择,一般认为是O(n^(3/2))。 在Vue.js中实现这些排序算法,可以帮助开发者更好地理解算法...
2. **希尔排序**:希尔排序是一种改进的插入排序,通过设置一个增量序列来分组元素,使得元素能在较远的位置进行比较,从而提高排序速度。随着增量逐渐减少,最终达到完全排序的目的。希尔排序比直接插入排序更适合...
7. 希尔排序:基于插入排序,通过增量序列改进,减少比较和交换的次数。 二、查找算法 1. 线性查找:逐个检查数组元素,直到找到目标值或遍历完数组。 2. 二分查找:适用于有序数组,每次查找都确定中间元素,根据...
8. 希尔排序:希尔排序是插入排序的一种优化版本,通过增量序列将待排序的元素分组,对每个组进行插入排序,然后逐步减小增量,直到增量为1,完成排序。希尔排序在实际应用中表现出较好的效果。 了解和掌握这些排序...
希尔排序的时间复杂度在最坏情况下可以达到O(n^2),但在平均情况下能够达到O(nlogn),比简单的插入排序有显著的性能提升。 希尔排序的基本步骤如下: 1. **选择增量序列**:首先,我们需要一个增量序列g1, g2, ......