直接插入排序算法思想:从第二个元素开始,依次将后面元素插入前面已经排序好的序列。

折半插入排序算法思想:从第二个元素开始,依次将后面元素插入前面已经排序好的序列(与直接插入排序不同的是寻找插入位置使用的是折半查找,先找到待插入位置,再统一后移元素,最后将待插入元素放到合适位置)。

希尔排序算法思想:先将待排序元素按照增量分成若干子表,对各个子表分别进行直接插入排序,当整个表中元素基本有序之后,再对全体元素进行一次直接插入排序。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int ElemType;
typedef struct SeqList {ElemType* data;int length;
}SeqList;
//直接插入排序算法思想:从第二个元素开始,依次将后面元素插入前面已经排序好的序列
void DirectInsertSort(SeqList L) {//直接插入排序for (int i = 1; i < L.length; i++) {int e = L.data[i];//保存待插入元素int cur = i - 1;while (L.data[cur] > e&&cur>=0) {//寻找插入位置L.data[cur + 1] = L.data[cur];cur -= 1;}L.data[cur + 1] = e;//while循环结束后L.data[cur]<e,故将e插入到L.data[cur + 1]位置}
}
//折半插入排序算法思想:从第二个元素开始,依次将后面元素插入前面已经排序好的序列
//(与直接插入排序不同的是寻找插入位置使用的是折半查找,先找到待插入位置,再统一后移元素,最后将待插入元素放到合适位置)
void HalfInsertSort(SeqList L) {for (int i = 1; i < L.length; i++) {int e = L.data[i];int cur = i - 1;int low = 0, high = cur, mid = (low + high) / 2;while (low <= high) {//折半查找,最后待插入位置为low指向位置mid = (low + high) / 2;if (L.data[mid] > e) {high = mid - 1;}else if (L.data[mid] < e) {low = mid + 1;}}for (int j = cur; j >= low; j--) {//统一后移元素L.data[j + 1] = L.data[j];}L.data[low] = e;//将待插入元素放到合适位置}
}
/*希尔排序算法思想:先将待排序元素按照增量分成若干子表,对各个子表分别进行直接插入排序,当整个表中元素基本有序之后,再对全体元素进行一次直接插入排序*/
void ShellSort(SeqList L) {for (int dk = L.length / 2; dk >= 1; dk /= 2)//步长变化{for (int i = dk; i < L.length; i += dk) {//对每组元素进行直接插入排序int e = L.data[i];//保存待插入元素int cur = i - dk;while (L.data[cur] > e && cur >= 0) {//寻找待插入位置L.data[cur + dk] = L.data[cur];cur -= dk;}L.data[cur + dk] = e;将待插入元素放到合适位置}}
}
int main() {int len;scanf("%d", &len);SeqList L;L.length = len;L.data = (ElemType*)malloc(sizeof(ElemType)*len);for (int i = 0; i < len; i++) {scanf("%d", &L.data[i]);}//DirectInsertSort(L);//直接插入排序//HalfInsertSort(L);//折半插入排序ShellSort(L);for (int i = 0; i < L.length; i++) {printf("%d ", L.data[i]);}return 0;
}

插入排序(直接插入排序,折半插入排序,希尔排序)相关推荐

  1. 算法研究:插入类排序(简单插入,折半插入,希尔排序)

    百度百科:有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法--插入排序法,插入排序的基本操作就是将一个数据插入到已经 ...

  2. C++实现各种插入排序(直接,折半,希尔)

    直接插入排序(无哨兵): 代码如下: #include <iostream> using namespace std;//数组下标从0开始 void InsertSort(int *a, ...

  3. 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序...

    先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...

  4. java 快速排序算法简单_排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序......

    先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...

  5. 王道八大排序:直接插入排序 折半插入排序 希尔排序 冒泡排序 快速排序 归并排序 基数排序

    文章目录 1.插入排序 1.1直接插入排序 1.2折半插入排序 1.3希尔排序 2.交换排序 2.1冒泡排序 2.2快速排序 3.选择排序 3.1简单选择排序 3.2堆排序 4.归并排序 5.基数排序 ...

  6. C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】

    目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...

  7. 九大经典算法之插入排序、希尔排序

    01 插入排序(Insertion Sort) 原理:每次选择一个元素,并且将这个元素和整个数组中的所有元素进行比较,然后插入到合适的位置. void insertion_sort(int arr[] ...

  8. 希尔排序法(插入排序的改进版本)

    (图片版权归原作者,下面给出的方案的时间复杂度比这个低) 希尔排序是在插入排序的基础上的一点改进,对于插入排序很熟悉的,希尔排序就很容易理解,如果插入排序不是很清楚的,可以看下插入排序的用法:插入排序 ...

  9. 【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)...

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/20043459   前言 本来想将所有的内部排序总结为一篇博文,但是随着研究的深入,还是放弃 ...

最新文章

  1. java搭建阿里云服务器环境(java环境+mysql+tomcat)和部署 JavaWeb 项目到云服务器(十分详细)
  2. C语言 其他标准函数
  3. Matplotlib基础(part1)--基本绘图
  4. 字符串 读取西门子_【必学技能】自己动手——基于C#实现手机APP远程访问西门子PLC...
  5. 数据库笔记10:创建与管理视图
  6. 古人与古代(他们和他们的时代)
  7. 【渝粤教育】国家开放大学2018年春季 0554-22T立体构成(一) 参考试题
  8. React:网络工具库
  9. 源码pub:C#实现IPv6地址的二进制输出
  10. 深入理解Nginx:模块开发与架构解析
  11. 英特尔核显无法为此计算机,win10intel显卡驱动装不上怎么办_Win10系统无法安装intel显卡驱动如何解决...
  12. 如何得到信号的幅度谱和相位谱
  13. 图解数据交换技术——电路交换、报文交换、分组交换
  14. 阿里云双十一服务器注册流程
  15. 计算机图形学中几何变换的定义,计算机图形学 实验7 三维几何变换(MFC中)
  16. windows/dos 命令
  17. 数据库表去除重复数据
  18. 帕萨特加载模式启用怎么解除_关闭帕萨特自动启停功能的方法
  19. 《论语》原文及其全文翻译 学而篇11
  20. 学习笔记javaSE---集合

热门文章

  1. IOS免签支持在线封装app分发源码 免签封装带绿标
  2. JAVA定义一个树形的结构_Java自定义树形结构
  3. Android初学之十二:Broadcast
  4. awl 多线程SYN***工具0.2版[转]
  5. 2022秋招前端面试题(一)(附答案)
  6. MQTT学习笔记——MQTT协议使用
  7. C# 获取Excel工作薄中Sheet页(工作表)名集合
  8. 二级备考:ppt自学知识笔记--基础操作1:ppt界面介绍
  9. Python3,2行代码添加水印,发朋友圈,图片再也不怕被盗了!!!
  10. WFD_RTSP交互包分析