ShellSort 希尔排序

# ShellSort希尔排序_Python实现

def shell_sort(li):
    n = len(li)
    # gap间隔为长度除2
    gap = n // 2

    while gap > 0:
        for i in range(gap, n):
            while i >= gap and li[i - gap] > li[i]:
                li[i], li[i - gap] = li[i - gap], li[i]
                i -= gap
        gap //= 2
    return li

list = [1, 55, 98984, 65, 165, 356, 54, 3, 645, 74, 64, 35]

li = shell_sort(list)

print(li)

  

希尔排序:

希尔排序使用了两个循环和一个遍历
希尔排序就是通过控制间隔完成大致分类, 然后分隔长度折半,继续对比,继续分类.然后再折半,再对比
容易混淆的地方在于, 当满足交换条件之后, 还要向前一步对比,以免更换后的数值比上一步还小.

原文地址:https://www.cnblogs.com/jrri/p/12099926.html

时间: 2024-07-31 14:29:39

ShellSort 希尔排序的相关文章

排序--ShellSort 希尔排序

希尔排序 no 实现 希尔排序其实就是插入排序.只不过希尔排序在比较的元素的间隔不是1. 我们知道插入排序 都是 一个一个和之前的元素比较.发现比之前元素小就交换位置.但是希尔排序可能是和前第n个元素比较,如果发现比前第n个元素小就和前第n个元素交换位置.具体看下图 第一趟比较.n是为5.也就是说每个数和前面第5个数比较.如果发现小于前面第5个数的话.交换位置. 所以我们看到 72 比 592 小. 所以交换位置. 283 比 348 小.继续交换 第二趟比较. n 是2.同理 最后一次比较.n

希尔排序 Shell Sort

希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名. 希尔排序实质上是一种分组插入方法.它的基本思想是:对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中:然后,对各组内的元素进行直接插入排序. 这一趟排序完成之后,每一个组的元素都是有序的.然后减小gap的值,并重复执行上述的分组和排序.重复这样的操作,当gap

<排序算法> 希尔排序ShellSort

1.核心思想:希尔排序是插入排序的一种,是直接插入排序的一种改进版本,他们同属于插入排序类.这是一个不稳定的排序算法.采取跳跃分割的策略:将相距某个“增量”的记录组成一个子序列,这样才能保证在子序列内分别进行直接插入排序后得到的结果是基本有序而不是局部有序.2.代码实现: 1 #include<iostream> 2 using namespace std; 3 4 void PrintArr(int arr[],int len); 5 void ShellSort(int arr[],int

奔走在算法的大路上(一)排序之希尔排序

希尔排序是插入排序的一种更高效的改进版本.它的作法不是每次一个元素挨一个元素的比较.而是初期选用大跨步(增量较大)间隔比较,使记录跳跃式接近它的排序位置:然后增量缩小:最后增量为 1 ,这样记录移动次数大大减少,提高了排序效率.希尔排序对增量序列的选择没有严格规定. 希尔排序最关键的是选对增量,关于增量的选择,建议参考:http://zh.wikipedia.org/wiki/希尔排序  中的步长序列. 希尔排序的核心思想是:由一定规则将带排序的长序列切割成多个子序列,子序列进行内部插入排序,如

排序算法——希尔排序

希尔排序 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 该方法因DL.Shell于1959年提出而得名. 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多, 当增量减至1时,整个文件恰被分成一组,算法便终止. 代码实现 void shellsort(int a[],int n) { int gap=0,i=0,temp=0,j=0; for(

排序算法之希尔排序

文章转载自http://www.cnblogs.com/chengxiao/ 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一.本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现. 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组

算法系列【希尔排序】篇

常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等.用一张图概括: 关于时间复杂度: 1.     平方阶 (O(n2)) 排序各类简单排序:直接插入.直接选择和冒泡排序. 2.     线性对数阶 (O(nlog2n)) 排序快速排序.堆排序和归并排序: 3.     O(n1+§))排序,§ 是介于 0 和 1 之间的常数.希尔排序 4.     线性阶 (O(n)) 排序基数排序,此外还有桶.箱排序. 关于稳定性: 稳定的排序算法:冒泡排序

希尔排序算法实现(1099)

p { margin-bottom: 0.25cm; line-height: 120% } 描述 编程实现希尔排序算法,按照非递减排序,测试数据为整数. input 第一行是待排序数据元素的个数n: 第二行是待排序的数据元素. output 一趟希尔排序后的结果. 样例输入 10 50 36 41 19 23 4 20 18 12 22 样例输出 4 20 18 12 22 50 36 41 19 23 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一

C语言中的排序算法--冒泡排序,选择排序,希尔排序

冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端 维基百科:点击打开链接 [cpp] view plain copy /* 用选择法对10个数进行排序 */ #include<stdio.h> void main() { int i,j,