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

C语言希尔排序

希尔排序(Shell Sort)是插入排序的一种,也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。

希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列(由相隔某个“增量”的记录组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的记录"基本有序"时,再对全体记录进行一次直接插入排序。

#include <stdio.h>  void shellSort(int arr[], int n) {  int gap, i, j, temp;  for (gap = n/2; gap > 0; gap /= 2) {  for (i = gap; i < n; i++) {  temp = arr[i];  for (j = i; j >= gap && arr[j-gap] > temp; j -= gap) {  arr[j] = arr[j-gap];  }  arr[j] = temp;  }  }  
}  int main() {  int arr[] = {12, 34, 54, 2, 3};  int n = sizeof(arr)/sizeof(arr[0]);  shellSort(arr, n);  printf("Sorted array: \n");  for (int i=0; i < n; i++) {  printf("%d ", arr[i]);  }  return 0;  
}

在这个代码中,shellSort 函数首先计算一个"gap"值,初始值为数组长度的一半。然后它会在每次迭代中逐渐减小这个值,直到它变为0。在每次迭代中,它都会使用当前的gap值来把数组分割成若干个子数组,并对每个子数组进行插入排序。这就是希尔排序提高效率的关键:它通过对整个数组进行一次插入排序,而不是对每个元素都进行一次,来减少必要的比较和交换操作。

http://www.lryc.cn/news/168796.html

相关文章:

  • KubeSphere 在互联网医疗行业的应用实践
  • 物联网:用python调入机器学习分析物联网数据入侵检测模块
  • 使用scss简化媒体查询
  • win部署CRM
  • Linux命令200例:dip用于用户与远程主机建立通信连接
  • 【每日一题】981. 基于时间的键值存储
  • IMU姿态解算,从IMU数据中计算旋转、速度、位置,IMU测量的原理
  • 【Qt-17】Qt调用matlab生成的dll库
  • css经典面试题(二)
  • jira搜索search issue条目rest实用脚本
  • 《C++ primer plus》精炼(OOP部分)——对象和类(5)
  • 钉钉旧版服务端SDK支持异步方法的升级改造
  • 【C语言】【数据存储】用%d打印char类型数据,猜结果是啥
  • 算法——双指针
  • 【PowerQuery】Excel的PowerQuery按需刷新
  • Django REST Farmowork初探
  • 【flink进阶】-- Flink kubernetes operator 版本升级
  • Linux Ubuntu20.04深度学习环境快速配置命令记录
  • 信息安全三级真题一
  • RK3568-tftp更新设备树和内核nfs挂载文件系统
  • FIR滤波器简述及FPGA仿真验证
  • 高速信号处理板资料保存:383-基于kintex UltraScale XCKU060的双路QSFP+光纤PCIe 卡设计原理图
  • QT:使用分组框、单选按钮、普通按钮、标签、行编辑器、垂直分布、水平分布做一个小项目
  • 封装微信小程序隐私信息授权
  • 【C#】FileInfo类 对文件进行操作
  • python中的字符串也是可迭代对象吗?
  • C++ 图像线特征提取【HoughLinesP算法】
  • Stable Diffusion WebUI内存不够爆CUDA Out of memory怎么办?
  • 模板学堂|数据可视化仪表板大屏设计流程梳理
  • 基于Xml方式Bean的配置-Bean的延时加载