/**
*
* @author SunnyMoon
*/
////////////////////////////////////////////////////////////////////////////////
/*******************************************************************************
* 概念介绍:
* *****************************************************************************
*
* 简单排序:
* 包括冒泡排序,选择排序和插入排序,是一些容易实现的,但速度比较慢的排序算法。
*
* 高级排序:
* 归并排序,希尔排序和快速排序比简单排序快很多。本节主要介绍希尔排序。
*
* 归并排序:
* 在递归算法中已经介绍过,它需要的容易是原始空间的两倍,是一个严重的缺点。
*
* 快速排序:
* 不需要大量辅助空间,并且是通用排序算法中最快的一咱排序算法,是基于划分的思想。
*
* 希尔排序:
* 不需要大量的辅助空间,和归并排序一样容易实现。希尔排序是基于插入排序的一种算法,
* 在此算法基础之上增加了一个新的特性,提高了效率。希尔排序的时间复杂度为 O(N*(logN)2),
* 没有快速排序算法快 O(N*(logN)),因此中等大小规模表现良好,对规模非常大的数据排序不是
* 最优选择。但是比O(N2)复杂度的算法快得多。并且希尔排序非常容易实现,算法代码短而简单。
* 此外,希尔算法在最坏的情况下和平均情况下执行效率相差不是很多,与此同时快速排序在最坏
* 的情况下执行的效率会非常差。
*
* 专家门提倡,几乎任何排序工作在开始时都可以用希尔排序,若在实际使用中证明它不够快,
* 再改成快速排序这样更高级的排序算法。
*
* 本质上讲,希尔排序算法的一种改进,减少了其复制的次数,速度要快很多。
* 原因是,当N值很大时数据项每一趟排序需要的个数很少,但数据项的距离很长。
* 当N值减小时每一趟需要和动的数据增多,此时已经接近于它们排序后的最终位置。
* 正是这两种情况的结合才使希尔排序效率比插入排序高很多。
*/
////////////////////////////////////////////////////////////////////////////////
class Array {
private long[] theArray;
private int nElems;
public Array(int max) {
theArray = new long[max];
nElems = 0;
}
public void insert(long value) {
theArray[nElems] = value;
nElems++;
}
public void display() {
System.out.print("A=");
for (int j = 0; j < nElems; j++) {
System.out.print(theArray[j] + " ");
}
System.out.println("");
}
public void shellSort() {
int inner, outer;
long temp;
int h = 1;
while (h <= nElems / 3) {
h = 3 * h + 1;
}
while (h > 0) {
for (outer = h; outer < nElems; outer++) {
temp = theArray[outer];
inner = outer;
while (inner > h - 1 && theArray[inner - h] >= temp) {
theArray[inner] = theArray[inner - h];
inner = inner - h;
}
theArray[inner] = temp;
}
h = (h - 1) / 3;
}
}
}
class ShellSortApp {
public static void main(String[] args) {
int maxSize = 30;
Array arr = new Array(maxSize);
for (int j = 0; j < maxSize; j++) {
long n = (int) (java.lang.Math.random() * 99);
arr.insert(n);
}
arr.display();
arr.shellSort();
arr.display();
}
}
////////////////////////////////////////////////////////////////////////////////
/**
* 运行结果:
* A=29 14 28 16 40 64 29 11 58 27 88 96 41 63 19 30 55 82 6 10 83 93 86 13 29 19 20 83 83 8
* A=6 8 10 11 13 14 16 19 19 20 27 28 29 29 29 30 40 41 55 58 63 64 82 83 83 83 86 88 93 96
*/
/**
* 总结:
* 希尔排序是对插入排序的一种强有力的改进,极大的提升了其效率,特别是当排序的
* 数据项增加的时候。
* 例子为随机生成30个数,然后将其用希尔算法排序再输出。
*/
//////////////////////////////////////////////////////////////////////////////////
分享到:
相关推荐
Java作为广泛应用的编程语言,其在实现数据结构和算法时有着丰富的库支持和优秀的可读性。下面将对标题和描述中提到的一些关键知识点进行详细解释。 1. **数据结构**: - **稀疏数组**:当大量数据中大部分为零或...
本篇文章将深入探讨四种基本的排序算法:冒泡排序、选择排序、插入排序以及希尔排序,并结合递归算法的复杂度进行分析。这些排序算法在不同的场景下有不同的效率表现,理解它们的原理和复杂度可以帮助我们更好地选择...
### Java 实现数据结构常见排序算法及详解 #### 排序算法概述 排序算法是计算机科学中的基础概念之一,主要用于将一系列数据按照特定规则进行排列。根据数据处理方式的不同,排序算法大致分为两大类:比较排序与非...
【数据结构与排序算法在Java中的应用】 在计算机科学中,数据结构是组织和存储数据的方式,而排序算法则是对这些数据进行排列的策略。在Java编程中,掌握各种排序算法对于提高程序效率至关重要。本篇文章将深入探讨...
《数据结构与算法Java》是由周鹏编著的一本深入探讨数据结构与算法的书籍,主要面向Java开发者。这本书详细地介绍了数据结构和算法的基础知识,对于提升编程能力,优化程序设计有着重要的指导意义。 首先,我们要...
标题《数据结构与算法(Java语言版)》以及作者周鹏所著的书籍,主要为三峡大学理学院的课程教材,内容基本上遵循严蔚敏的经典教材结构,并且包含了具体的Java代码实现。本书的内容体系主要分为九章,涵盖了数据结构...
《数据结构与算法分析》是计算机科学领域的一本经典著作,尤其对于Java开发者来说,它提供了深入理解数据结构和算法的宝贵资源。这本书的特点在于它使用Java语言来阐述各种数据结构和算法,使得读者能够更好地理解和...
本书《数据结构与算法(JAVA语言版解密)》详细介绍了数据结构和算法的基本概念,以及如何使用Java语言实现这些数据结构和算法。书中内容涵盖了面向对象程序设计的基础知识、数据结构与算法的核心理论、以及各类数据...
### 数据结构与算法Java中文概览 #### Java与面向对象...以上内容概述了《数据结构与算法java中文》的主要知识点,涵盖了从编程基础到高级数据结构与算法的全面介绍,旨在为学习者提供系统化的理论指导和实践指南。
### 数据结构与算法(JAVA语言版) #### Java与面向对象程序设计 - **Java语言基础知识** - **基本数据类型及运算**:介绍Java中的基本数据类型,包括整型、浮点型、字符型等,并解释了这些类型的运算规则。 - *...
稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、...
《数据结构与算法分析:Java语言描述(第2版)》是一本综合介绍了数据结构、算法设计与分析的教材,利用Java编程语言深入讲解了各种数据结构和算法的实现及其运行时间的分析,作者是Mark Allen Weiss。本书面向的...
在编程领域,尤其是在Java开发中,理解和掌握数据结构与算法是至关重要的。数据结构是存储和组织数据的方式,而算法则是解决问题的步骤或方法。两者是计算机科学的基础,对于优化程序性能、解决复杂问题有着不可替代...
Java数据结构与算法学习笔记之排序,主要探讨了六种常见的排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序和快速排序。这些排序算法是计算机科学的基础,无论是在日常开发还是面试中都经常遇到。现在...
在Java数据结构的学习中,排序算法的性能比较是一项重要的实践任务。这个大作业的主要目标是对多种排序算法,包括直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序和归并排序,进行性能分析。下面...
适用人群:本人文档是通过Java语言来编写数据结构中排序的算法,所以要具备一定Java编程基础。以及想要复习或者自学数据结构的小伙伴。 能学到什么:1.六个基础排序算法,分别是冒泡排序,选择排序,插入排序,希尔...
小白日记之八种排序算法——八种排序算法:冒泡排序、选择排序、插入排序、希尔排序、基数排序、堆排序、归并排序、快排