Java常见排序算法之Shell排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法。总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的。
从今天开始,我们将要进行基本的排序算法的讲解。Are you ready?Let‘s go~~~
1、排序算法的基本概念的讲解
时间复杂度:需要排序的的关键字的比较次数和相应的移动的次数。
空间复杂度:分析需要多少辅助的内存。
稳定性:如果记录两个关键字的A和B它们的值相等,经过排序后它们相对的位置没有发生交换,那么我们称这个排序算法是稳定的。
否则我们称这个排序算法是不稳定的。
排序算法的常见分类:
1、内部排序(最常见的一种排序方式,不需要借助第三方辅助存储工具)
2、外部排序(需要借助外部存储来辅助完成相关的排序操作)
如果参与排序的数据元素非常的多,数据量非常的大,计算机无法把整个排序过程放到内存中进行的话,
我们必须借助外部存储器如磁盘来完成,这种排序方式,我们称之为外部排序。
其中外部排序最常见的就是多路归并排序,即将原始文件分解成多个能够一次性装入内存的部分,分别把每一部分调入
内存完成相应的排序,接下来在对多个有序的外部文件进行多路归并排序。
对于我们绝大多数的程序员而言,我们经常遇到的为内部排序。接下来我们将要对常见的内部排序进行相应的讲解。
今天要讲解的内部排序为:
Shell排序
1.Shell排序的基本概念的讲解
=1(
<
…<d2<d1),即所有记录放在同一组中进行
2.Shell排序的Java代码实现
package com.yonyou.test;/*** 内部排序算法之Shell排序* 默认按照从小到大进行排序操作* @author 小浩* @创建日期 2015-3-27*/
public class Test{public static void main(String[] args) {//需要进行排序的数组int[] array=new int[]{8,3,2,1,7,4,6,5};//输出原数组的内容printResult(array);//shell排序操作shellSort(array);//输出排序后的相关结果printResult(array);}/*** shell排序算法* 增量h=(h*3)+1; 这个增量公式是由Knuth给出的* 如果不是很了解的话请百度一下吧* @param array*/private static void shellSort(int[] array) {//首先根据数组的长度确定增量的最大值int h=1;// 按h * 3 + 1得到增量序列的最大值while(h <= array.length / 3){h = h * 3 + 1;}//进行增量查找和排序while(h>0){ for(int i=h;i<array.length;i++){for(int k=i;k<array.length;k+=h){//判断是否需要重新排序,如果小于k-h处的值,需要重新排序if(array[k]<array[k-h]){int tempValue=array[k];int j=k;for(;j>=i&&tempValue<array[j-h];j-=h){array[j]=array[j-h];}array[j]=tempValue;}}printResult(array);}h=(h-1)/3;} }/*** * 输出相应数组的结果* @param array*/private static void printResult(int[] array) {for(int value:array) System.out.print(" "+value+" ");System.out.println();}/*** 交换数组中两个变量的值* @param array* @param i* @param j*/private static void swap(int[] array,int i,int j){int temp=array[i];array[i]=array[j];array[j]=temp;}
}
Java常见排序算法之Shell排序相关推荐
- 排序算法之shell排序
关于shell排序算法的介绍参见: 图解排序算法(二)之希尔排序 - dreamcatcher-cx - 博客园 书中3.5节中关于shell排序的实现如下: void shellsort ...
- 排序算法 | 希尔shell排序,算法的图解、实现、复杂度和稳定性分析
希尔shell排序 1.希尔排序--定义 2.希尔排序--步骤描述 3.希尔排序--算法实现 4.希尔排序--复杂度.稳定性分析 1.希尔排序--定义 希尔排序按其设计者希尔(Donald Shell ...
- Java排序算法之——希尔排序
算法简述 希尔排序也叫作shell排序或缩小增量排序,据说是一个叫D.L.Shell的人发明出来的,顾取名shell排序.这种排序是基于插入排序思想的,也比较适用于数据量大时. 我刚开始看到时候对于插 ...
- JAVA排序算法之希尔排序
基本介绍 希尔排序是希尔(Donald Shell)于 1959 年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序法基本思 ...
- java排序算法 sort_Java排序算法之SleepSort排序示例
本文实例讲述了Java排序算法之SleepSort排序.分享给大家供大家参考,具体如下: 分享一个很有创意的排序算法:sleepSort .巧妙利用了线程的sleep(),代码如下: public c ...
- 排序算法之希尔排序(Java实现)
希尔排序介绍 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序基本思想 ...
- Java经典排序算法:选择排序,动图演示排序过程
Java经典排序算法:选择排序,动图演示排序过程 示意动图: public class Main {public static void main(String[] args) {new Main() ...
- 常见排序算法之希尔排序
文章目录 1.概述 2.希尔排序之交换法 3.希尔排序之移动法 4.测试案例 1.概述 由于简单的插入排序每次数据量变多的时候,数据需要移动且交换数据的次数也会变多,继而影响效率.希尔排序就是在这个基 ...
- 排序---初级排序算法(选择排序、插入排序和希尔排序)
写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera Algorithms Part1&2 本文 ...
最新文章
- oracle自动备份
- 在CentOS 6.9 x86_64的nginx 1.12.2上开启ngx_http_empty_gif_module模块实录
- 算法---------简化路径(Java版本)
- 蓝牙nrf52832的架构
- OpenCASCADE:使用 XSTEPDRAW
- 电脑动态壁纸_每日壁纸—水彩插画少女动漫手机高清无水印壁纸第二波
- mysql配置 | 快速上手Linux玩转典型应用
- sql server2008导入文本文件
- 英制BSW 美制UNC 螺牙的理解
- 2022年云南最新消防设施操作员模拟试题题库及答案
- redis setex和set 的区别
- mysql中char是什么意思_mysql中char与varchar的区别
- 计算机处理器采用多核,电脑处理器多核心与高主频哪个更重要【详细介绍】
- 国标28181:什么是RTP协议与RTCP协议
- 第一条台电子计算机,第一台计算机
- UnityC#字串如何获取换行符号-最基础的字串处理方法,也最容易常见错误
- AVPro Video 插件在unity中动态播放视频
- git 进阶系列教程-------git使用流程
- Django基础概念和MVT架构(一)
- RedHat RHEL7.2 系统安装详细步骤