希尔排序

简介: 希尔排序

一,概念:希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一

二,复杂度:希尔排序时间复杂度是 O(n^(1.3-2)),空间复杂度为常数阶 O(1)。希尔排序没有时间复杂度为 O(n(logn)) 的快速排序算法快 ,因此对中等大小规模表现良好,但对规模非常大的数据排序不是最优选择,总之比一般 O(n^2 ) 复杂度的算法快得多

三:代码


#include<stdio.h>
#include<stdlib.h>
//堆排序用于查找最大值 或者 最小值
void show(int *p, int n)
{
    for (int i = 0; i < n;i++)
    {
        printf("%4d", p[i]);
    }
    printf("\n");
}
void shellsort(int *p, int length)
{
    int d = length / 2;//增量
    while (d >= 1)//增量终止条件
    {
        for (int i = d; d < length && i < length; i++)//最后的位置
        {
            int x = p[i];//备份数据
            int j = i - d;//与其对于的前面的元素
            while (j >= 0 && p[j]>x)//在数组范围内  找到擦入的位置
            {
                p[j + d] = p[j];
                j = j - d;//每次变化
            }
            p[j + d] = x;//交换
        }
        //d = d / 2;
        d--;//增量自由设定
    }
}
void main()
{
    int a[8] = { 1, 8, 2, 7, 3, 6, 4, 5 };
    show(a, 8);
    shellsort(a, 8);
    show(a, 8);
}
相关文章
|
人工智能 算法 NoSQL
LRU算法的Java实现
LRU(Least Recently Used)算法用于淘汰最近最少使用的数据,常应用于内存管理策略中。在Redis中,通过`maxmemory-policy`配置实现不同淘汰策略,如`allkeys-lru`和`volatile-lru`等,采用采样方式近似LRU以优化性能。Java中可通过`LinkedHashMap`轻松实现LRUCache,利用其`accessOrder`特性和`removeEldestEntry`方法完成缓存淘汰逻辑,代码简洁高效。
573 0
|
10月前
|
安全
电脑进入bios关闭网卡的技巧
华硕电脑开机显示字符无法进入系统,提示“PXE-MOF:Exiting PXE ROM”,表明电脑正尝试从网卡启动。解决方法为进入BIOS关闭网卡启动功能。开机时连续按F2进入BIOS,切换至“Security”选项卡,找到“I/O Interface Security”设置,选择“LAN Network Interface”并设为“LOCKED”以禁用网卡启动,最后按F10保存退出即可。
1513 0
|
人工智能
[AI Google] TimesFM:AI预测股市价格,能否助我财务自由?
探索谷歌TimesFM模型,看看它能否通过预测股票价格帮助我们实现财务自由。
1246 0
[AI Google] TimesFM:AI预测股市价格,能否助我财务自由?
|
缓存 前端开发 搜索推荐
【Flutter前端技术开发专栏】Flutter中的自定义绘制与Canvas API
【4月更文挑战第30天】Flutter允许开发者通过`CustomPaint`和`CustomPainter`进行自定义绘制,以实现丰富视觉效果。`CustomPaint` widget将`CustomPainter`应用到画布,而`CustomPainter`需实现`paint`和`shouldRepaint`方法。`paint`用于绘制图形,如示例中创建的`MyCirclePainter`绘制蓝色圆圈。Canvas API提供绘制形状、路径、文本和图片等功能。注意性能优化,避免不必要的重绘和利用缓存提升效率。自定义绘制让Flutter UI更具灵活性和个性化,但也需要图形学知识和性能意识。
388 0
【Flutter前端技术开发专栏】Flutter中的自定义绘制与Canvas API
|
数据采集 JavaScript 前端开发
服务器端渲染(SSR)和客户端渲染(CSR)
服务器端渲染(SSR)和客户端渲染(CSR)
520 1
|
开发工具 git
百度搜索:蓝易云【git常用命令stash详细解释。】
使用 `stash`命令可以在处理多个分支切换或者保存临时修改时非常有用。你可以通过 `stash`命令保存当前工作目录的修改,切换到其他分支或者应用其他更改,然后再返回并应用之前保存的stash。这样可以确保你的工作目录始终保持干净,并且不会丢失任何重要的修改。
655 4
|
Python
解决报错:jinja2.exceptions.TemplateNotFound: index.html
一、问题描述 (1)首先写了一个简单的登录账号密码的页面:
1961 0
解决报错:jinja2.exceptions.TemplateNotFound: index.html
|
JSON Java 数据格式
Java基础—实现微服务模块接收Http请求回调数据
本文中详细介绍在微服务模块中实现接收公网Http请求数据回调接口说明。
1169 0
Java基础—实现微服务模块接收Http请求回调数据
|
前端开发 小程序 C++
微信小程序开发实战(WXSS VS CSS)
微信小程序开发实战(WXSS VS CSS)
微信小程序开发实战(WXSS VS CSS)
|
安全 IDE 数据挖掘
C/C++中常用必会的专业单词(持续更新 目前165个)
C/C++中常用必会的专业单词(持续更新 目前165个)
884 0