排序有基本可以划分为简单排序和高级排序,简单排序有冒泡排序,选择排序,插入排序。高级排序有希尔排序和基于划分思想的快速排序。
希尔排序是基于插入排序的,通过加大插入排序中元素之间的间隔,并在有间隔的元素中进行插入排序,从而使数据项能大跨度的移动。经过一趟排序后,希尔排序算法减小数据项的间隔再进行排序,依次进行下去。
首先是插入排序的代码
public class InsertSort {
public static void main(String[] args) {
int[] a = {2,4,1,8,5,3,9};
System.out.println("排序前:");
for(int i:a)
{
System.out.print(i);
}
System.out.println();
int out;//需要插入的元素下标
int in;
for(out=1;out<a.length;out++)
{
int temp = a[out];
in = out;
//逐步比较,若是数组的元素大于需要插入的元素则向左移动。
while(in>0&&a[in-1]>=temp)
{
a[in] = a[in-1];
--in;
}
a[in] = temp;
}
System.out.println("排序后:");
for(int i:a)
{
System.out.print(i);
}
}
}
接下来就是希尔排序的代码,只是在插入排序上面做了很少的更改。
public class ShellSort {
public static void main(String[] args) {
int[] a = {2,4,1,8,5,3,9};
System.out.println("排序前:");
for(int i:a)
{
System.out.print(i);
}
System.out.println();
int h = 1; //希尔排序中元素的间隔
while(h<=a.length/3)
{
h = h*3 + 1; //kunth序列,有其他的产生序列方式
}
while(h>0)
{
//插入排序部分
int out;//需要插入的元素下标
int in;
for(out=1;out<a.length;out++)
{
int temp = a[out];
in = out;
//逐步比较,若是数组的元素大于需要插入的元素则向左移动。否则将元素插入到该位置。间隔为h
while(in>h-1&&a[in-h]>=temp)
{
a[in] = a[in-h];
in-=h;
}
a[in] = temp;
}
h = (h-1)/3; //逐步减小序列间的距离
}
System.out.println("希尔排序后");
for(int i : a)
{
System.out.print(i);
}
}
}
分享到:
相关推荐
希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的元素按照一定的间隔分组,对每组进行插入排序,然后逐渐减小间隔,直到间隔为1,此时整个序列视为...
希尔排序(Shell Sort)是由Donald Shell在1959年提出的一种基于插入排序的改进算法。它的主要思想是通过设置一系列的增量序列,逐步减少这些增量,将待排序的元素进行分组,然后在每个小组内进行直接插入排序。这个...
本文将详细讲解六种经典的排序算法——合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合提供的文件名(sort.c、set.c、main.c、set.h、sort.h)推测出每个文件可能包含的代码实现。 1. **合并...
希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一个增量序列分成若干个子序列,然后对每个子序列进行插入排序,最后再进行一次全局的插入...
(1) 完成5种常用内部排序算法的演示,5种排序算法为:快速排序,直接插入排序,选择排序,堆排序,希尔排序; (2) 待排序元素为整数,排序序列存储在数据文件中,要求排序元素不少于30个; (3) 演示程序开始,...
### 希尔排序法(希尔插入排序,希尔交换排序) #### 一、希尔排序法简介 希尔排序法是计算机科学领域中一种重要的排序算法,它由美国计算机科学家Donald Shell于1959年提出,因此得名希尔排序。希尔排序是一种...
希尔排序(Shell Sort)是一种基于插入排序的快速排序方法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一定的间隔进行分组,然后对每组进行插入排序,随着间隔逐渐缩小,最后进行一次全排列,...
### 直接插入排序与希尔排序的比较 #### 一、概述 本篇文章将通过一组具体的数据集(8个整数)对直接插入排序(Direct Insertion Sort)和希尔排序(Shell Sort)这两种排序方法进行深入分析和比较。这两种排序...
希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一定的增量分组,对每组使用直接插入排序,然后逐渐减小增量,继续进行分组排序,直到增量...
根据提供的文件信息,我们可以深入探讨几种经典的排序算法:冒泡排序、直接插入排序、快速排序以及希尔排序。这些算法在数据结构与算法课程中是非常重要的基础内容,它们各自有着独特的特性和应用场景。 ### 1. ...
下面将详细讲解这7种排序算法:快速排序、归并排序、插入排序、选择排序、冒泡排序、堆排序以及希尔排序。 1. **快速排序**:由C.A.R. Hoare提出的,采用分治策略。基本思想是选取一个基准元素,通过一趟排序将待...
本主题将详细探讨希尔排序、冒泡排序、堆排序等经典的排序算法,这些都是数据结构与算法学习中的核心内容,尤其对于北邮数据结构课程来说,理解并掌握这些排序方法至关重要。 1. **插入排序**: 插入排序是一种...
这里我们将深入探讨四种常见的排序算法:基数排序、堆排序、希尔排序和直接插入排序。 首先,基数排序是一种非比较型整数排序算法,它的基本思想是将整数按位数切割成不同的数字,然后按每个位数分别比较。基数排序...
希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一个增量序列分成若干个子序列,然后对每个子序列进行插入排序,最后减小增量,重复这个...
### 希尔排序原理与实现 #### 一、希尔排序简介 希尔排序(Shell Sort)是一种基于插入排序的高效算法。它通过将原始数组分割成多个子序列来进行排序,从而提高了插入排序的效率。希尔排序的核心思想是通过将相隔...
本资源提供了七大经典排序算法的实现程序,包括快速排序、冒泡排序、选择排序、归并排序、插入排序、希尔排序和堆排序。下面将逐一详细介绍这些排序算法及其原理。 1. 快速排序:由C.A.R. Hoare提出,是一种采用...
希尔排序,又称希尔斯排序,是由美国计算机科学家Donald Shell于1959年提出的一种基于插入排序的快速排序算法。这种排序方法通过设置一个增量序列,将待排序数组分割成若干个子序列,然后对每个子序列进行插入排序。...
希尔排序是一种基于插入排序的快速排序算法,由Donald Shell在1959年提出。它的主要特点是通过将待排序的数组元素按照一定的间隔分组,然后对每组进行插入排序,随着间隔逐渐减小,直到间隔为1时,整个数组成为一个...
希尔排序首先选择一个较大的增量,对数组进行插入排序,然后逐渐减小增量,再次对数组进行插入排序,直到增量为1,这时数组的每个元素间隔为1,相当于进行了一次插入排序,整个数组已经基本有序。在给出的`...
### 希尔排序算法详解 #### 算法概述 希尔排序(Shell Sort),又称为缩小增量排序,是插入排序的一种更高效的改进版本。它由Donald Shell在1959年提出。希尔排序的基本思想是:将待排序列分割成若干子序列分别...