`
boilingblood
  • 浏览: 13266 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

希尔排序JAVA

阅读更多
希尔排序:在插入排序的基础上 先对数组设置一个 递减的增量 increment ,对每个增量里面的所有数组组合进行插入排序,效率比直接插入排序要高,但是不稳定。

具体测试小例子:

public static void main(String[] args) {
// TODO Auto-generated method stub
  long [] a = {10,123,32,76,123,54,36,67,89,93,23,544,232,111123};
//   for(int j=0;j<a.length;j++){
//   System.out.print(a[j]+" ");
//   }
  for(int increment = a.length/2;increment>0;increment/=2){ // 循环增量

  for(int i=0;i<increment;i++){//循环每个增量里面的子数组 总共子数组时 increment 个  
  //对每个子数组 进行插入排序

  insertSort(a,i+1,increment);  // a代表整个数组 ,I代表 在该增量 下的 第几个子数组
  System.out.println(" ");
  } 

  }
  //输出数组
  for(int j=0;j<a.length;j++){
  System.out.print(a[j]+" ");
  }
}
private static void insertSort(long [] a,int i ,int inc) { // a代表整个数组 ,I代表 在该增量 下的 第几个子数组
long tempData ;
int k,j;

System.out.print(i+" ");
for( k=i+inc;k<=a.length;k+=inc){  // 从每个子数组的第二个开始 循环代插入的数
System.out.print(k+" ");
tempData = a[k-1];//          把待排序 数组的 第二 个数 放 入临时 变量
j =k-inc-1;//前一个数
// 把每个临时变量比较后插入到 已经排序号的数组
   while(j>=0&&tempData<a[j]){  // 按照 升序排列
   a[j+inc]=a[j];            // 后移数组
   j-=inc;
   }
   a[j+inc]=tempData;  // 因为是 j-=inc 后 把 代插入的数 插入,则需+inc

}
}
分享到:
评论
1 楼 endual 2012-10-05  
乱了乱了,彻底的乱了。

public static int[] shellSort(int[] arr) {
		int i, j, n = 1, temp, len = arr.length;

		while (n <= len / 2) { // 间距的控制,设定好间距一定要保证为1的存在
			n = n * 2 + 1;     // 经典的设计  
		}
		
		//int n = 
		while (n > 0) {
			for (i = n; i < len; i++) {
				temp = arr[i];
				j = i;
				while (j >= n && arr[j - n] >= temp) {
					arr[j] = arr[j - n];
					j -= n;
				}
				arr[j] = temp;
			}
			n = (n - 1)/2; // 调整间距
			System.out.println("---" + n);
		}

		return arr;
	}

相关推荐

    希尔排序java代码

    下面是一个简单的希尔排序Java代码实现: ```java public class ShellSort { public static void shellSort(int[] arr) { int len = arr.length; // 定义增量序列,例如初始增量为len/2 int gap = len / 2; ...

    希尔排序java.java

    希尔排序

    希尔排序(java)

    在Java中,希尔排序的实现通常包括以下几个关键步骤: 1. **增量序列的选择**:希尔排序的效率很大程度上取决于增量序列的选择。经典的增量序列是Hibbard序列、Sedgewick序列或Knuth序列。例如,可以使用Hibbard...

    希尔排序java.zip

    在Java中,希尔排序可以通过定义一个希尔排序方法,接收一个整型数组作为参数,然后根据上述步骤实现排序。具体代码如下(使用Sedgewick增量序列): ```java public class ShellSort { public static void shell...

    java算法——希尔排序

    按下标的一定增量分组,对每组使用直接插入算法排序;随着增量 * 逐渐减少,每组包含的关键字越来越多,当增量减至1时,整个文件恰 * 好被分成一组,算法便终止。 * 8,9,1,7,2,3,5,4,6,0 * //初始增量 gap=...

    分别使用Java和Python实现希尔排序算法

    希尔排序:分别使用Java和Python实现希尔排序算法 希尔排序:分别使用Java和Python实现希尔排序算法 希尔排序:分别使用Java和Python实现希尔排序算法 希尔排序:分别使用Java和Python实现希尔排序算法 希尔排序:...

    希尔排序算法Java简单解释

    在Java中实现希尔排序,我们可以定义一个希尔排序的函数,接受一个整型数组作为参数,然后按照上述步骤进行排序。代码如下: ```java public class ShellSort { public static void sort(int[] arr) { int len = ...

    算法可视化系列——排序算法——希尔排序

    在`AlgorithmShellSort.java`这个文件中,我们可以预期看到希尔排序的具体实现。通常,Java代码会包含一个名为`shellSort()`的函数,它接收一个整数数组作为参数,并对其进行希尔排序。以下是希尔排序的基本步骤: ...

    希尔排序。java

    希尔排序代码,其中是希尔排序的代码部分,又不知道的可以进来看一下

    [Java算法-排序]希尔排序.java

    该资源提供了一份全面的指南,介绍了如何在Java中实现希尔排序。文档中涵盖了希尔排序的基本概念,包括如何对数组进行排序以及如何在Java中实现希尔排序。此外,文档还包括一个逐步指南,介绍如何在Java中实现希尔...

    希尔排序.java 使用Java实现

    希尔排序 希尔排序.java 使用Java实现

    希尔排序基本思想

    5. 实现方式:希尔排序可以使用各种编程语言实现,如C、C++、Java等。在C语言中,可以通过编写函数来实现希尔排序,主要涉及到数组的操作和循环控制。 6. 应用场景:希尔排序适用于需要快速排序但对稳定性要求不高...

    Java 插入排序之希尔排序的实例

    以下是一个简单的希尔排序Java实现的详细分析: ```java public static void shellSort(int[] intArray) { // 输出原始数组 System.out.print("将要排序的数组为: "); for (int k = 0; k ; k++) System.out....

    希尔排序介绍和java代码实现

    希尔排序算法详解与 Java 代码实现 希尔排序是一种改进的插入排序算法,也被称为缩小增量排序。它通过将待排序的数据按照一定的增量分组,对每个分组进行插入排序,然后逐渐缩小增量,再次对分组进行插入排序,直至...

    java版冒泡排序,插入排序,堆排序,快速排序,归并排序,希尔排序,桶排序

    希尔排序是插入排序的一种优化版本,通过设定一个增量序列,将待排序的数组按照增量分成多个子序列,对每个子序列进行插入排序,最后减小增量,直至为1,整个数组有序。这种方法减少了元素移动的次数,提高了排序...

    希尔排序的Java实现方法ShellSort

    希尔排序的Java实现方法ShellSort,简单易懂,适合算法初学者。

    希尔排序

    `ShellSort.java` 文件可能是实现希尔排序的Java代码示例。在该文件中,可以看到以下关键部分: - 定义间隔序列:这通常通过定义一个方法来实现,根据所选的序列生成一系列间隔。 - 插入排序:希尔排序的核心是插入...

    Java实现希尔排序.rar

    在Java中实现希尔排序,你需要创建一个希尔排序的函数,接受一个整数数组作为参数。函数内部可以定义一个增量序列,然后用for循环控制间隔的减小,每次间隔变化时,遍历整个数组,根据当前间隔将每个元素看作子序列...

    详解Java常用排序算法-希尔排序

    在 Java 中,希尔排序可以使用以下代码实现: ```java public class Shell { public static void shellSort(int[] arr) { int n = arr.length; for (int gap = n / 2; gap &gt; 0; gap /= 2) { for (int i = gap; ...

    快速排序、归并排序、希尔排序、冒泡排序、选择排序等8中排序方式原理分析java实现

    这里我们将深入探讨快速排序、归并排序、希尔排序、冒泡排序、选择排序以及插入排序这六种经典的排序算法,并通过Java语言来实现它们。 1. **快速排序**:由C.A.R. Hoare在1960年提出,是基于分治策略的一种高效...

Global site tag (gtag.js) - Google Analytics