算法之排序算法-shell排序(交换法)
可以先看注释掉的分析,最后在看三层for循环
package com.ebiz.sort;import java.util.Arrays;/*** @author YHj* @create 2019-07-30 8:53* shell排序-交换法*/ public class Shell{public static void main(String[] args) {int [] arr={8,9,1,7,2,3,5,4,6};getResult(arr);// 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;}}}}}}
待完善...
转载于:https://www.cnblogs.com/jiushixihuandaqingtian/p/11299220.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 ...
- 十大经典排序算法之希尔排序及其优化
一.希尔排序 1.概念 希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进. 希尔排序又称缩小增量排序,因 DL.Shell 于 1959 年提出而得名. 它通过比较相距 ...
- 数据结构之内部排序算法总结笔记
内部排序算法 排序的基本概念: 把一组无序的数据元素按照关键字值递增(或递减)的顺序重新排列. 一.插入排序 思想:将序列分为[有序段]与[无序段]两段,然后依次将[无序段]中的元素插入到[有序段 ...
- 7大排序算法详解+java实现
目录 0 概述 1 冒泡排序 2 选择排序 3 插入排序 4 希尔排序 5 快速排序 6 归并排序 7 基数排序 下载地址 7大排序算法详解文档及java代码实现(可直接运行)下载地址:https:/ ...
- 十种常见排序算法欢聚一堂
文章目录 1.常见排序算法分类 2.非线性时间比较类排序 2.1 交换类排序 2.1.1 冒泡排序 2.1.2 快速排序 2.2 插入类排序 2.2.1 直接插入排序 2.2.2 Shell 排序 2 ...
- 【数据结构】排序算法总结
在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的:若具有相同关键字的记录之间的相对次序发生改变,则称这种排序方法是不稳定的.即 ...
- 八种常用排序算法参考
写在前面: 因为网络上有很多篇讲排序算法的,所以这里就不详细讲了,只作为参考和自己查阅 当然了,虽然篇幅也会短很多,但部分重点和要点还在 八种排序算法分别是: ①选择排序: ②冒泡排序: ③插入排序: ...
最新文章
- 1.2 Spyder的基本使用
- html 密码框自动填充,解决chrom浏览器input密码框自动填充
- 关于element-ui 中使用Notice组件(Message、MessageBox、Notification)所遇到的坑
- python条形码识别系统_Python识别处理照片中的条形码
- 用Silverlight做广告Banner
- Ubuntu 16.04修改显示字体大小(包括GNOME/Unity)
- 使用ESP32能驱动电子墨水屏吗?
- 服务器子系统是什么,服务器是什么样子的,服务器一般用什么系统!
- lua软件测试自动化,一种基于Lua脚本的嵌入式软件自动化测试系统及方法专利_专利查询 - 天眼查...
- Haybale Guessing (POJ-3657)
- [PYTHON] 核心编程笔记(14.Python执行环境)
- java内存stack heap_java内存解析-------stack(栈)和heap(堆)的理解
- Oracle插入时间
- Java招聘数据统计_拉勾网2019年3月20日招聘数据统计
- 深入理解C/C++ [Deep C (and C++)] (1)
- Cheatsheet: 2013 04.01 ~ 04.16
- C# 实体类的get与set
- VC2008编译libthrift
- android sqlite数据库 emoji表情,Android的Emoji表情
- Mac OS使用FFmpeg进行视频H264,H265编码