当前位置: 首页 > article >正文

希尔排序(C++)

希尔排序

是插入排序的一种,也是缩小增量排序。希尔排序是记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

代码实现

class Solution {
public:
    void ShellSort(vector<int>&nums,int n){
        for(int dk=n/2;dk>=1;dk=dk/2){
            for(int i=dk;i<n;i++){
                if(nums[i]<nums[i-dk]){
                    int tmp=nums[i];
                    int j;
                    for(j=i-dk;j>=0&&tmp<nums[j];j-=dk){
                        nums[j+dk]=nums[j];
                    }
                    nums[j+dk]=tmp;
                }
            }
        }
    }
    vector<int> sortArray(vector<int>& nums) {
        ShellSort(nums,nums.size());
        return nums;
    }
};

运行结果

在这里插入图片描述

时空复杂度和稳定性

时间复杂度

最好情况

最好情况和步长是有关系的,但是目前还不能确定最合适的步长是多少

最坏情况

O ( n l o g n ) O(nlogn) O(nlogn)

###空间复杂度
O ( 1 ) O(1) O(1)

稳定性

排序过程中会交换元素位置,所以不是稳定的。


http://www.kler.cn/news/17085.html

相关文章:

  • 安卓开发_广播机制_广播的最佳实践:实现强制下线功能
  • PyQt5桌面应用开发(5):对话框
  • Java 基础进阶篇(二)—— static 静态关键字与单例模式
  • kafka 学习,笔记
  • Spring Boot参考指南-Spring Boot安装(Maven安装、Gradle安装)
  • Docker compose 常用指令
  • c++ 11标准模板(STL) std::vector (二)
  • 天气预报查询 API 提供个性化的天气服务的设计思路
  • 贪心刷题~
  • AI 时代,提示词便是生产力
  • ChatGPT AI使用成本
  • 【每日随笔】操控人性 ③ ( 懂领导的心思 | 办事的套路 | 管理学与权谋 | 人事谱系 )
  • HDU5552 Bus Routes(分治NTT)
  • 每天一道算法练习题--Day16 第一章 --算法专题 --- ----------哈夫曼编码和游程编码
  • SpringCloud:ElasticSearch之数据同步
  • 【实例展示通俗易懂】SQL中的内外连接、左右连接
  • Vue3+Element Plus环境搭建和一键切换明暗主题的配置
  • 【Latex】有关于Latex tabularray的一些很不错的教程、模板
  • LeetCode周赛复盘(第343场周赛)
  • isNotBlank 和isNotEmpty的区别
  • 网络安全 等级保护 网络设备、安全设备知识点汇总
  • Nachos系统的上下文切换
  • Latex 定理和证明类环境(amsthm)和(ntheorm)的区别
  • 每日一题142——最少操作使数组递增
  • 【Linux超强学习路线图】赶紧收藏学习!
  • 数据库管理-第七十二期 复盘(20230505)
  • 【TCP为什么需要粘包和拆包】
  • LeetCode_双指针_中等_24.两两交换链表中的节点
  • 使用dataFEED OPC Suite将西门子PLC数据转发至REST API
  • FL Studio21没有language选项?如何设置切换中文语言