程序分享--排序算法--希尔排序

关注我,持续分享逻辑思维&管理思维; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;
有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》《做好面试准备,迎接2024金三银四》。

-------------------------------------正文----------------------------------------

希尔排序:概述
希尔排序是一种分组插入排序方法,它是直接插入排序算法的一种改进版本,它是由 Donald Shell 在1959年提出的。希尔排序的思想是让数组中任意间隔为h的元素都是有序的,这样在整个数组中就形成了一个新的有序的子序列,然后逐渐减小h的值,再进行排序,最后当h为1时,整个数组就是有序的。
 

希尔排序:算法描述
先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序。
1.选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;
2.按增量序列个数k,对序列进行 k 趟排序;
3.每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。

#include <iostream>
using namespace std;
 
void shellSort(int* arr, int n) 
{
    // Start with a big gap, then reduce the gap
    for (int gap = n / 2; gap > 0; gap /= 2) 
    {
        // Do insertion sort on gapped sequence
        for (int i = gap; i < n; i += 1) 
        {
            int temp = arr[i];
            int j;
            for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) 
            {
                arr[j] = arr[j - gap];
            }
            arr[j] = temp;
        }
    }
}
 

 
int main() 
{
    int vec = { 4,8,9,2,100,400,20,7,17,31,22,0,1,55,30 };
	cout << "希尔排序前:";
	for (int i = 0; i < 15; i++)
		cout << vec[i] << ' ';
	cout << std::endl;

	shellSort(vec, 0, 15);

	cout << "希尔排序后:";
	for (int i = 0; i < 15; i++)
		cout << vec[i] << ' ';
	cout << std::endl;
}

相关推荐

  1. 程序分享--排序算法--排序

    2024-03-16 07:58:04       40 阅读
  2. 排序算法——排序

    2024-03-16 07:58:04       67 阅读
  3. 排序算法排序

    2024-03-16 07:58:04       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-16 07:58:04       73 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-16 07:58:04       78 阅读
  3. 在Django里面运行非项目文件

    2024-03-16 07:58:04       63 阅读
  4. Python语言-面向对象

    2024-03-16 07:58:04       73 阅读

热门阅读

  1. 服务器远程端口故障应该如何解决并且避免

    2024-03-16 07:58:04       36 阅读
  2. 【智能方案设计】测温仪技术应用方案

    2024-03-16 07:58:04       45 阅读
  3. Vscode screen 模式终端窗口查看历史信息

    2024-03-16 07:58:04       38 阅读
  4. vscode中C++调试launch.json配置

    2024-03-16 07:58:04       34 阅读
  5. 零基础入门多媒体音频(2)-音频焦点2

    2024-03-16 07:58:04       37 阅读
  6. 排序算法-一天两个之冒泡、选择排序

    2024-03-16 07:58:04       35 阅读
  7. 前端实现websocket通信讲解(vue2框架)

    2024-03-16 07:58:04       47 阅读
  8. PMS150C系列 应广8位OTP IO单片机

    2024-03-16 07:58:04       41 阅读
  9. ASP.NET-WebFoms常见前后端交互方式

    2024-03-16 07:58:04       43 阅读
  10. AcWing 4964.子矩阵

    2024-03-16 07:58:04       38 阅读
  11. Kafka的分区(partition和副本)

    2024-03-16 07:58:04       37 阅读
  12. android studio配置gradle

    2024-03-16 07:58:04       36 阅读
  13. 什么是深度学习?

    2024-03-16 07:58:04       37 阅读
  14. 【学习】目标检测中的anchor

    2024-03-16 07:58:04       35 阅读