首页 > 其他分享 >希尔排序

希尔排序

时间:2023-02-05 18:22:56浏览次数:35  
标签:int 插入排序 希尔 sizeof 排序 size

#include <iostream>
using namespace std;

/**
 * 希尔排序
 * 希尔排序是插入排序的的改进
 * 改进的主要思想是:
 *              1.插入排序对于小规模数组效率较高
 *              2.插入排序对于部分有序数组排序效率高
 * 希尔排序的性能取决于递增序列,和h有关。
 * 希尔排序也可适用于大数组,希尔排序要比选择排序和插入排序快得多,数组越大,优势越大。
 * 最坏的情况下,希尔排序的比较时间和N^(3/2)成正比
 * TIPS:
 *  使用该Demo中的递增序列的比较次数不会超过size的若干倍乘以递增序列的长度。
 * @param a
 * @param size
 * @return
 */
int shellInsertion(int a[],int size){
    int h = 1; //h有序
    //使用序列(3^k-1)/2,称之为递增序列。
    while(h < size/3) h = h*3 + 1;
    while(h>=1){
        for(int i = h;i < size;i++){
            for(int j = i;j >= h && (a[j] < a[j-h]);j-=h){
                int temp = a[j];
                a[j] = a[j-h];
                a[j-h] = temp;
            }
        }
        h = h/3;
    }
}
int main() {
    int a[] = {99,90,78,56,45,34,23,11,1};
    shellInsertion(a,sizeof(a)/sizeof(a[0]));
    for(int i = 0;i < sizeof(a)/sizeof(a[0]);i++){
        cout<<a[i]<<" ";
    }
    return 0;
}

标签:int,插入排序,希尔,sizeof,排序,size
From: https://www.cnblogs.com/poteitoutou/p/17093745.html

相关文章

  • 俩猴排序
    众所周知,猴子排序的原理是打乱序列,然后判断是否有序。可以看到,猴子排序的时间复杂度为\(\Omega(n),O(?)\)。通常打乱序列的方式为:for(inti=0;i<n;++i){ swap......
  • 排序
    排序1.冒泡排序1.对于一个数组,比较所有的相邻的元素,如果第一个大于第二个,则交换2.比较一轮下来,可以保证一个元素是有序的3.在比较n-1轮,整个数组就排序好了代码......
  • 【八大数据排序法】快速排序法的图形理解和案例实现 | C++
    第十八章快速排序法:::hljs-center目录第十八章快速排序法●前言●认识排序●一、快速排序法是什么?1.简要介绍2.具体情况3.算法分析●二、案例实现1.......
  • 八种常用的排序算法
    八种常用的排序算法对各种常用的排序算法的代码实现、时间复杂度、空间复杂度、稳定性做简要分析。Author:MsuenbDate:2023-01-31概述排序也称排序算法(SortAlgo......
  • 排序(Power Query)
    数据源(左单列、右多列)://单列排序let源=Excel.CurrentWorkbook(){[Name="表1"]}[Content],排序的行=Table.Sort(源,{"成绩",1})in排序的行//单列......
  • Qt中QSqlQueryModel对应的表格进行自动排序功能
    Qt中使用了自己的机制来避免使用SQL语句,为我们提供了更简单的数据库操作及数据显示模型,分别是只读的QSqlQueryModel,操作单表的QSqlTableModel和以及可以支持外键的QSqlRela......
  • 【算法】二分法 ② ( 排序数组中查找目标值 | 二分法的经典写法 | 在排序数组中查找元
    文章目录​​一、排序数组中查找目标值(二分法的经典写法)​​​​二、在排序数组中查找元素的最后一个位置(二分法的通用模板)​​一、排序数组中查找目标值(二分......
  • 冒泡排序——C语言描述
    冒泡排序——C语言描述目录冒泡排序——C语言描述0测试用例框架1定义2代码4测试用例0测试用例框架https://blog.csdn.net/m0_59469991/article/details/127137119?......
  • js中数组对象排序
    //数组对象按照指定属性排序--冒泡写法constduplicateRemovalBubbling=function(oldArr,key){for(leti=0;i<oldArr.length;i++){for(letj=0;j<oldArr.length......
  • 768.max-chunks-to-make-sorted-ii 最多能完成排序的块II
    问题描述768.最多能完成排序的块II解题思路可以划分成满足条件的块的充分必要条件是,块内所有元素都小于等于右侧数组中未划分的任一元素。本题中使用了map来进行处理,实......