c++希尔排序

希尔排序(Shell Sort)是一种插入排序的改进版本,它是非稳定排序算法。希尔排序的基本思想是将待排序的元素分成若干个小组,对每组进行插入排序,然后逐步减小增量,继续按组进行插入排序操作,直至增量为1,最后对整个序列进行一次插入排序。

以下是一个使用 C++ 实现的希尔排序示例:

cpp 复制代码
#include <iostream>
#include <vector>

void shellSort(std::vector<int>& arr) {
    int n = arr.size();
    
    for (int gap = n / 2; gap > 0; gap /= 2) {
        for (int i = gap; i < n; i++) {
            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() {
    std::vector<int> arr = {12, 34, 54, 2, 3};
    
    std::cout << "Original array:";
    for (int num : arr) {
        std::cout << " " << num;
    }
    std::cout << std::endl;
    
    shellSort(arr);
    
    std::cout << "Sorted array:";
    for (int num : arr) {
        std::cout << " " << num;
    }
    std::cout << std::endl;
    
    return 0;
}

在这个示例中,我们首先定义了一个 shellSort 函数用于实现希尔排序,然后在 main 函数中初始化一个整数数组,调用 shellSort 函数对数组进行排序,并输出排序前后的数组内容。希尔排序通过不断缩小增量的方式,可以更有效地减少逆序对的数量,提高排序效率。

相关推荐
raindayinrain30 分钟前
c++并发
c++
j7~34 分钟前
【C++】智能指针的使用及其原理--详解
c++·c++11·内存泄漏·智能指针·raii·boost智能指针
Persistent的粽子!2 小时前
C++:类与对象(一)
开发语言·c++·经验分享·笔记
库玛西2 小时前
深入浅出Linux select网络模型:从底层位图原理到C++面向对象高级封装
linux·服务器·网络·c++·ubuntu
2402_882893862 小时前
深入浅出 unordered_map 与 unordered_set——从使用到底层差异
c++·哈希·unordered_map·unordered_set
今天要早睡_3 小时前
C++ 核心语法速过:命名空间、引用、函数重载与 nullptr 深度解析
android·java·c++
汉克老师3 小时前
CSP-J 初赛(以满分为目标):第二十七课 《图的遍历——BFS广度优先搜索——像“水波纹”一样,一层一层地搜索》
c++·csp-j·小学生·学c++编程
闻缺陷则喜何志丹4 小时前
【动态规划】P3609 [USACO17JAN] Hoof, Paper, Scissor G
c++·算法·动态规划·洛谷
汉克老师4 小时前
CSP-J 初赛(以满分为目标):第二十六课 《图的遍历——DFS深度优先搜索——从“树的先序遍历”走进真正的图世界》
c++·csp-j·小学生·学c++编程
程序猿编码4 小时前
基于GGML的C++17轻量化语音推理引擎:说话人识别与语音分析技术全解析
开发语言·c++·pytorch·深度学习·神经网络·大模型