高级排序比简单排序要快的多,简单排序的时间复杂度是O(N^2),希尔(shell排序大约是O(N*(logN)^2),而快速排序是O(N*logN)。说明:下面以int数组的从小到大排序为例。 希尔(shell排序  希尔排序是基于插入排序的,首先回顾一下插入排序,假设插入是从左向右执行的,待插入元素的左边是有序的,且假如待插入元素比左边的都小,就需要挪动左边的所有元素,如下图所
# 教你如何实现"shell排序 java" ## 一、整体流程 首先,我们需要了解一下shell排序的基本原理,它是一种插入排序的改进版,通过将待排序的元素分组,逐步缩小间隔,最终使用插入排序的方式完成排序。接下来,我们可以通过以下表格展示整个排序流程: | 步骤 | 间隔 | | --- | --- | | 步骤 1 | n/2 | | 步骤 2 | (n/2)/2 | | ..
原创 2024-02-25 04:17:54
41阅读
手动输入一行字符串,并对其排序。 脚本如下:#!/bin/bash#a test about sortecho "please input a number list"read -a arrsfor((i=0;i<${#arrs[@]};i++)){ for((j=0;j<${#arrs[@]}-1;j++)){ if [[ ${arrs[j]} -gt ${arrs[j+
原创 2021-07-29 09:44:25
289阅读
手动输入一行字符串,并对其排序。 脚本如下:#!/bin/bash#a te
原创 2022-04-06 16:29:44
548阅读
[基本的想法]将原本有大量记录数的记录进行分组。切割成若干个子序列,此时每一个子序列待排序的记录个数就比較少了,然后在这些子序列内分别进行直接插入排序,当整个序列都基本有序时。再对全体记录进行一次直接插入排序。所谓的基本有序,就是小的keyword基本在前面,大的基本在后面,不大不小的基本在中间。像...
转载 2015-07-29 10:58:00
71阅读
2评论
python实现【希尔排序】(Shell Sort)算法原理及介绍1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。希尔排序的核心在于间隔序列的设定。既可以提前设定好间隔序列,也可以动
[code="java"]/** * Shell排序 * */public class ShellSort { public void sort(int[] data) { for (int i = data.length / 2; i > 2; i /{ insertSort(...
原创 2023-07-21 16:24:17
28阅读
希尔排序实质上是一种分组插入方法。 它的基本思想是: 对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中;然后,对各组内的元素进行直接插入排序。 这一趟排序完成之后,每一个组的元素都是有序的。然后减小gap的值,并重复执行上述的分组和排序。重复这样的操作,当gap=1时,整个数列就是有序的,希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。
原创 2022-04-23 18:58:30
219阅读
2点赞
为了便于管理,先引入个基础类: package algorithms; /**  * @author yovn  *  */ public abstract class Sorter<E extends Comparable<E>> {
转载 精选 2008-12-18 16:06:52
662阅读
三,选择排序 选择排序相对于冒泡来说,它不是每次发现逆序都交换,而是在找到全局第i小的时候记下该元素位置,最后跟第i个元素交换,从而保证数组最终的有序。 相对与插入排序来说,选择排序每次选出的都是全局第i小的,不会调整前i个元素了。 package algorithms; /**  * @author yovn  *  */
转载 精选 2008-12-18 16:08:44
742阅读
1点赞
1评论
六 归并排序 算法思想是每次把待排序列分成两部分,分别对这两部分递归地用归并排序,完成后把这两个子部分合并成一个 序列。 归并排序借助一个全局性临时数组来方便对子序列的归并,该算法核心在于归并。 package algorithms; import java.lang.reflect.Array; /**  * @author&nbsp
转载 精选 2008-12-18 16:10:41
1057阅读
作者:JAVA杂家 出处:[url]http://www.blogjava.net/javacap/archive/2007/12/13/167364.html[/url]   排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序 为了便于管理,先引入个基础类: package algorithms;/** * @author&nb
转载 精选 2009-03-19 10:16:51
653阅读
排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序为了便于管理,先引入个基础类:package algorithms;/** * @author yovn * */public abstract class Sorter<E extends Comparable<E>> {    &nbs
转载 精选 2010-08-04 20:52:31
621阅读
Shell排序:一种插入排序。距离的概念:两个数之间的间隔i个数,这两个数的距离就为i例如:1
原创 2022-08-11 14:31:59
190阅读
def shell_sort(list):n=len(list)gap=n//2while gap > 0:print([i for i in range(gap,n)],’------------’)for i in range(gap,n):j=iwhile j>=gap and list[j-gap]>list[j]:list[j-gap],list[j]=...
原创 2022-06-20 20:22:25
4787阅读
  注意while(h>0) 循环的使用.那位高手能告诉我下,为什么把这个循环去掉,为什么就有问题了呢?而我认为应该出现死循环才对啊? 但是没有出现。有兴趣的朋友,欢迎讨论   package high; public class HighSort {   private int[] a;//待排序的数组   public
原创 2009-11-30 22:38:48
517阅读
原理将排序数组分成若干个子序列(这个取决于最初设定的步长值),然后对各个子序列之间进行直接插入排序,最后再缩小增量(即步长值)再进行插入排序,直到序列顺序基本稳定(步长足够小)时,对这种序列进行一次直接插入排序,在排序状况较好时,直接插入排序的效率还是挺高的。分析   在最坏的情况下,每个数字在每次比较的过程总都会被比较一次,所以在最坏的情况下其时间复杂度O(n2)。
原创 2016-03-15 22:10:23
693阅读
原理将排序数组分成若干个子序列(这个取决于最初设定的步长值),然后对各个子序列之间进行直接插入排序,最后再缩小增量(即步长值)再进行插入排序,直到序列顺序基本稳定(步长足够小)时,对这种序列进行一次直接插入排序,在排序状况较好时,直接插入排序的效率还是挺高的。分析   在最坏的情况下,每个数字在每次比较的过程总都会被比较一次,所以在最坏的情况下其时间复杂度O(n2)。
原创 2016-03-15 22:11:12
772阅读
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数
import java.util.ArrayList; import java.util.List; /** * 排序算法主类 * */ public class SortArray { /* * 【插入排序】 基本思想: 在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的, * 现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的,
转载 2023-06-15 16:13:16
55阅读
  • 1
  • 2
  • 3
  • 4
  • 5