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

【插入排序】Insert_Sort

一、直接插入排序 

void InsertSort(int *arr, int n) {
    int i, j, temp;
    for (i = 1; i < n; ++i) {
        if (arr[i] < arr[i - 1]) {
            temp = arr[i];
            for (j = i - 1; j >= 0 && arr[j] > temp; j--) {
                arr[j + 1] = arr[j];
            }
            arr[j + 1] = temp;
        }
    }
}

注意:第一个元素是有序的,从第二个元素开始,首先要判断这个元素要不要插入,如果这个元素比前面的有序序列中的元素都大,就不需要插入。

二、直接插入排序(哨兵)

void InsertSort(int *arr, int n) {
    int i, j;
    for (i = 2; i < n; ++i) {
        if (arr[i] < arr[i - 1]) {
            arr[0] = arr[i];
            for (j = i - 1; j >= 0 && arr[j] > arr[0]; j--) {
                arr[j + 1] = arr[j];
            }
            arr[j + 1] = arr[0];
        }
    }
}

三、折半插入排序

void BinsertSort(int *arr, int n) {
    for (int i = 1; i < n; ++i) {
        int low = 0, high = i - 1, temp = arr[i];
        while (low <= high) {
            int mid = (low + high) / 2;
            if (temp < arr[mid]) {
                high = mid - 1;
            } else {
                low = mid + 1;
            }
        }
        for (int j = i - 1; j >= high + 1; j--) {
            arr[j + 1] = arr[j];
        }
        arr[high + 1] = temp;
    }
}

四、希尔排序

void ShellSort(int *arr, int n) {
    for (int d = n / 2; d >= 1; d /= 2) {
        for (int i = d; i < n; i++) {
            if (arr[i] < arr[i - d]) {
                int temp = arr[i];
                int j;
                for (j = i - d; j >= 0 && arr[j] > temp; j -= d) {
                    arr[j + d] = arr[j];
                }
                arr[j + d] = temp;
            }
        }
    }
}

相关文章:

  • 电机控制::软件架构::微型软件架构
  • 基于开源Odoo、SKF Phoenix API与IMAX-8数采网关的圆织机设备智慧运维实施方案 ——以某纺织集团圆织机设备管理场景为例
  • I²C简介
  • OSPF协议五种网络类型中DR和BDR选举说明
  • Linux内核实时机制4 - 实时改造优化 - PREEMPT_RT方案
  • Linux学习笔记之深入理解进程调度
  • 3、cadence从零开始让一个VCO起振——如何调频
  • 复现log4j2的jndi注入成功反弹shell
  • SQL进阶技巧:如何统计用户跨端消费行为?
  • (leetcode 1749 前缀和)1749. 任意子数组和的绝对值的最大值
  • 【嵌入式Linux应用开发基础】进程实战开发
  • 华为固态电池引发的思索
  • 2.18寒假
  • 06:高级命令
  • DeepSeek驱动下的数据仓库范式转移:技术解耦、认知重构与治理演进
  • 解析JUC包底层源码实现
  • 3.5 使用Tokenizer编解码文本:从原理到企业级实践
  • ArcGIS笔记之度分秒与十进制度的转换
  • 【分治法】棋盘覆盖问题 C/C++(附代码和测试实例及算法分析)
  • C语言——字符串
  • 广西钦州:坚决拥护自治区党委对钟恒钦进行审查调查的决定
  • 巴基斯坦首都及邻近城市听到巨大爆炸声
  • 新买宝马竟是“维修车”,男子发视频维权被4S店索赔100万
  • 七大交响乐团“神仙斗法”,时代交响在上海奏出时代新声
  • 圆桌丨权威专家解读中俄关系:在新形势下共同应对挑战、共创发展机遇
  • 4月外汇储备增加410亿美元,黄金储备连续6个月增加