资料来自网络参考:
/**
* 插入排序:希尔排序
*/
public class Shellsort2 {
private static final int ARRAYLENGHT = 10;
private static int[] pData = new int[ARRAYLENGHT+1];
public static void main(String[] args) {
// 随机生成待排数组,数组的第一个不赋值
for (int i = 1; i < pData.length; i++)
pData[i] = (int) (Math.random() * 100);
for (int i = 1; i < pData.length; i++)
System.out.print(pData[i] + " ");
System.out.println("");
// 插入排序的:希尔排序
Shellsort2.shellSort(pData);
System.out.println("\n***********************");
for (int i = 1; i < pData.length; i++)
System.out.print(pData[i] + " ");
System.out.println("\n"+"pData[0] value is "+pData[0]);
}
//希尔排序
public static void shellSort(int[] seqList){
int n = 1;
int increment = n;//增量初值,不妨设 n>0
do{
increment = increment/3 + 1; //求下一增值
shellPass(seqList,increment);//一趟增量为increment的shell插入排序
}while(increment >1);
}
public static void shellPass(int[] seqList,int d){
//希尔排序中的一趟排序,d为当前增量
int i,j;
for(i=d+1; i<seqList.length; i++)//将seqList[d+1..n]分别插入各组当前的有序区
if(seqList[i]<seqList[i-d]){
seqList[0] = seqList[i];//seqList[0]只是暂存单元
j = i-d;
do{//查找seqList[i]的插入位置
seqList[j+d] = seqList[j];//后移记录
j = j-d;//查找前一记录
}while(j>0 && seqList[0]<seqList[j]);
seqList[j+d] = seqList[0];//插入seqList[i]到正确的位置上
}//endif
}//shellPass
}
第二种:
import java.util.Arrays;
public class Shellsort3 {
public static void main(String[] args) {
int[] a = new int[10];
for (int i = 0; i < a.length; i++) {
a[i] = (int) (Math.random() * 100);
}
System.out.println("排序前:");
System.out.println(Arrays.toString(a));
int j = 0;
int temp = 0;
// 分组
for (int increment = a.length / 2; increment > 0; increment /= 2) {
System.out.println("increment:"+increment);
// 每个组内排序
for (int i = increment; i < a.length; i++) {
temp = a[i];
for (j = i; j >= increment; j -= increment) {
if (temp < a[j - increment])
a[j] = a[j - increment];
else
break;
}
a[j] = temp;
System.out.println(" j:"+j+" "+"a[j]:" + a[j]);//debug
System.out.println(" ____"+Arrays.toString(a));//debug
}
System.out.println("____"+Arrays.toString(a));//debug
}
System.out.println("排序后:");
System.out.println(Arrays.toString(a));
}
}
分享到:
相关推荐
本文将深入探讨Java编程语言中实现的七种主要排序算法:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序以及归并排序。每种算法都有其独特性,适用于不同的场景和数据特性。 1. **直接插入排序**:...
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
希尔排序是插入排序的一种优化版本,通过设定一个增量序列,将待排序的数组按照增量分成多个子序列,对每个子序列进行插入排序,最后减小增量,直至为1,整个数组有序。这种方法减少了元素移动的次数,提高了排序...
2. 分组插入排序:希尔排序将待排序的数据按照增量分成多个子序列,对每个子序列进行插入排序。相比于直接对整个序列进行插入排序,分组插入排序可以减少数据的移动次数,提高排序效率。 3. 逐渐缩小增量:希尔排序...
希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一定的增量分组,对每组使用直接插入排序,然后逐渐减小增量,继续进行分组排序,直到增量...
Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...
java8中经典排序算法:插入排序、堆排序,选择排序、希尔排序,基数排序、冒泡排序、归并排序、快速排_Arithmetic
- 对于接近有序的数组,插入排序的性能非常优秀,因此在某些排序算法中,例如希尔排序,会结合插入排序来提高效率。 通过理解插入排序的工作原理和实现方式,我们可以更好地掌握排序算法,并在实际编程中根据具体...
希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一个增量序列分成若干个子序列,然后分别对子序列进行插入排序,最后再进行一次整体的插入...
4. **希尔排序**:希尔排序是插入排序的优化版,它通过将数组按照一定的增量分组进行插入排序,然后逐渐减小增量,直到增量为1,完成排序。Java实现时,需要定义增量序列,如初始值为数组长度的一半,然后每次减半,...
希尔排序是一种改进的插入排序算法,由Donald Shell在1959年提出。它通过将待排序的元素按一定的间隔分组,然后对每组进行插入排序,逐步缩小间隔,直至间隔为1,此时就相当于普通的插入排序。这种方法减少了元素...
1. 插入排序:希尔排序的基础是插入排序,对于每个子序列,我们采用插入排序的方式对它们进行处理。插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。插入排序的...
本篇文章将深入探讨四种基本的排序算法:冒泡排序、选择排序、插入排序以及希尔排序,并结合递归算法的复杂度进行分析。这些排序算法在不同的场景下有不同的效率表现,理解它们的原理和复杂度可以帮助我们更好地选择...
八种排序算法原理及Java实现是排序算法中的一种,包括冒泡排序、快速排序、直接插入排序、希尔排序、选择排序、归并排序和基数排序等。 冒泡排序是八种排序算法中的一种,属于交换排序。冒泡排序的基本思想是重复...
- 希尔排序:通过增量序列将待排序元素分组,然后对各组进行插入排序,逐步减少增量,提高效率。 2. 交换排序: - 冒泡排序:通过不断交换相邻的逆序元素,使最大(或最小)元素逐渐“冒”到数组末尾,平均时间...
在本文中,我们将对 Java 中的选择排序、插入排序和希尔排序进行详细的解释。 一、选择排序 选择排序是一种简单的排序算法。它的基本思想是:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在...
设计一个负责排序的程序包,实现多种排序算法,至少包括插入排序、冒泡排序和快速排序算法。 要求: 1.可以对任何简单类型和任意对象进行排序 2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法...
- 插入排序:希尔排序的核心是插入排序,所以代码中会有用于插入排序的循环结构,将每个子序列的元素依次与前面的元素比较并交换位置。 - 主循环:根据间隔序列逐步减小间隔,每次迭代都对当前间隔下的子序列进行...
这里我们将深入探讨快速排序、归并排序、希尔排序、冒泡排序、选择排序以及插入排序这六种经典的排序算法,并通过Java语言来实现它们。 1. **快速排序**:由C.A.R. Hoare在1960年提出,是基于分治策略的一种高效...
本文将介绍两种常见的排序算法:直接插入排序和希尔排序,并通过Java代码实现来帮助理解。 1. 直接插入排序(直接插入排序) 直接插入排序是一种简单的排序方法,它的工作原理类似于我们平时手动整理扑克牌。在排序...