算法之排序算法-shell排序(移位法)
个人觉得移位法就是借希尔排序进行分组,插入排序进行排序
注释是上一篇的交换法.
而且这种移位排序的真的很快
package com.ebiz.sort;import java.text.SimpleDateFormat; import java.util.Date;/*** @author YHj* @create 2019-07-30 8:53* shell排序-交换法*/ public class Shell{public static void main(String[] args) {int[] arr = new int[80000];for (int i = 0; i < 80000; i++) {arr[i] = (int) (Math.random() * 800000);}String s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());System.out.println("排序前 = " + s);getResult(arr);String l = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());System.out.println("排序后 = " + l);//System.out.println(Arrays.toString(arr));//第二次分组 5/2=2 2组,每组两个数的间隔步长为2,//一组5个数,外层循环,一组比较4次,一共8次 // for (int i = 2; i < arr.length; i++) { // //确立要比较的步长的数 // for (int j = i-2; j >=0 ; j-=2) { // if (arr[j]>arr[j+2]){ // int temp=arr[j+2]; // arr[j+2]=arr[j]; // arr[j]=temp; // } // } // // } // System.out.println(Arrays.toString(arr));//第3次分组 2/2=1 1组,,每组两个数的间隔步长为1,//一组10个数,外层循环,一组比较9次,一共9次 // for (int i = 1; i < arr.length; i++) { // //确立要比较的步长的数 // for (int j = i-1; j >=0 ; j-=1) { // if (arr[j]>arr[j+1]){ // int temp=arr[j+1]; // arr[j+1]=arr[j]; // arr[j]=temp; // } // } // // }//System.out.println(Arrays.toString(arr)); }public static void getResult(int[] arr) { // //第一次分组 10/2=5 5组,每组两个数的间隔步长为5, // // 一组两个数,外层循环 一组比较1次,一共5次 // for (int i = 5; i < arr.length; i++) { // //确立要比较的步长的数 // for (int j = i-5; j >=0 ; j-=5) { // if (arr[j]>arr[j+5]){ // int temp=arr[j+5]; // arr[j+5]=arr[j]; // arr[j]=temp; // } // } // // }//控制分的组数 // for (int i = arr.length/2; i >=1 ; i/=2) { // //控制每组比较的次数 // for (int j = i; j < arr.length; j++) { // //每组进行比较并进行交换 // for (int k= j-i; k >=0 ; k-=i) { // if (arr[k]>arr[k+i]){ // int temp=arr[k+i]; // arr[k+i]=arr[k]; // arr[k]=temp; // } // } // // } // // // }//shell排序-移位法,即插入排序//控制分组for (int gap = arr.length/2; gap >0 ; gap/=2) {//所有组进行排序for (int i=gap; i<arr.length;i++){//待排序的数int j=i;int temp=arr[j];//进行比较while (j-gap >= 0 && temp <arr[j-gap]){arr[j]=arr[j-gap];j-=gap;}arr[j]=temp;}}}}
转载于:https://www.cnblogs.com/jiushixihuandaqingtian/p/11313073.html
算法之排序算法-shell排序(移位法)相关推荐
- 【八大排序】Shell排序
目录 前言 一.分组规则 二.代码实现 总结 前言 本文将介绍八大排序之一,Shell排序,Shell排序实际为直接插入排序的优化,使其时间复杂度降低. "shell排序,又名希尔排序,被称 ...
- 数据结构与算法之--高级排序:shell排序和快速排序
高级排序比简单排序要快的多,简单排序的时间复杂度是O(N^2),希尔(shell)排序大约是O(N*(logN)^2),而快速排序是O(N*logN). 说明:下面以int数组的从小到大排序为例. 希 ...
- C--排序算法:shell排序、快速排序
1.shell排序 Shell排序是这样来分组并排序的:将序列分成子序列,然后分别对子序列进行排序,最后将子序列组合起来.Shell排序将数组元素分成"虚拟"子序列,每个子序列用插 ...
- Java常见排序算法之Shell排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- java 算法 排序算法_Java七种排序算法以及实现
Java常见七种排序算法以及实现 最近学习一些排序算法,怕自己以后忘记就打算整理起来供自己复习 萌新一枚学习Java没多久,以下仅供参考.如有错误希望大佬指正,欢迎大家在评论区交流探讨. 1.冒泡排序 ...
- 数据结构之内部排序算法总结笔记
内部排序算法 排序的基本概念: 把一组无序的数据元素按照关键字值递增(或递减)的顺序重新排列. 一.插入排序 思想:将序列分为[有序段]与[无序段]两段,然后依次将[无序段]中的元素插入到[有序段 ...
- 十种常见排序算法欢聚一堂
文章目录 1.常见排序算法分类 2.非线性时间比较类排序 2.1 交换类排序 2.1.1 冒泡排序 2.1.2 快速排序 2.2 插入类排序 2.2.1 直接插入排序 2.2.2 Shell 排序 2 ...
- 深圳大学算法实验一——排序算法性能分析
深圳大学算法实验一 一.实验目的与要求 1. 掌握九种排序算法原理 2. 掌握不同排序算法时间效率的经验分析方法,验证理论分析与经验分析的一致性. 3. 对多种排序算法提出改进方案 4. 综合比较各种 ...
- 十种经典排序算法精粹(c语言版本)
下面给出这段时间我苦心研究验证过的十种经典排序算法的C语言版本,即下面的排序算法: 插入排序,shell排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,桶排序,基数排序和计数排序.整理出来以作备 ...
- 【数据结构】排序算法总结
在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的:若具有相同关键字的记录之间的相对次序发生改变,则称这种排序方法是不稳定的.即 ...
最新文章
- numpy 数组 保留小数点后两位小数
- Android中文输入的新选择——搜狗拼音输入法
- 马斯克再发声,称人工智能是人类文明面临的最大风险
- 【机器视觉】 comment算子
- 北美暴风雨,Linux5.12被延迟6天发布
- LinkedList 方法知识点
- Linux 环境下安装 GitLab 与配置
- static关键字_一题搞定static关键字
- Jquery之AJAX用户注册表单验证(Vancl版)
- html背景透明图片不透明,html - css实现背景透明内容不透明。
- Python操作Excel制作可视化数据图,实现自动化办公
- SharePoint下载服务器资源
- 剖析虚幻渲染体系(15)- XR专题
- 【Nginx服务优化与防盗链】
- 秘密:从程序员到领导者的微妙之处
- 2012年度最佳分享:仿webQQ界面,详情请下载,不吃亏
- 计算机校本培训心得,校本培训心得体会(通用3篇)
- 史上最恐怖的10篇超短篇鬼故事(转…
- 高速数字电路AC耦合电容HFSS仿真
- 职员信息管理系统php,员工信息管理系统(含附源代码).doc