数据结构- 插入排序

  • 插入排序

    1.直接插入排序

void InsertSort(int *a, size_t size)//直接插入排序

{

assert(a);

for (size_t i = 0; i < size - 1; ++i)

{

int end = i;

int tmp = a[end + 1];

while (end >= 0 && a[end]>tmp)

{

a[end + 1] = a[end];

--end;

}

a[end+1] = tmp;

}

}

  • 2.希尔排序

//希尔排序

void ShellSort(int *a, size_t size)

{

assert(a);

int gap = size;

while (gap > 1)

{

gap = gap / 3 + 1;

for (size_t i = 0; i < (size - gap); i++)

{

int end = i;

int tmp = a[end + gap];

while (end >= 0 && a[end]>tmp)

{

a[end + 1] = a[end];

end = end - gap;

}

a[end + gap] = tmp;

}

}

}

时间: 2024-12-22 14:30:52

数据结构- 插入排序的相关文章

大话数据结构——插入排序

#include<iostream> using namespace std; #define MAX_SIZE 100//用于排序数组个数的最大值 typedef struct { int r[MAX_SIZE+1];//用于存储要排序的数组 int length;//用于记录顺序表的长度 }sqlist; //用于交换数组r中下标i和下标j的数组元素的值 void swap(sqlist* L, int i,int j) { int temp; temp=L->r[i]; L->

数据结构精要------直接插入排序和希尔排序算法

上篇总结中主要实践了算法的内排序的选择排序,那么接下来我们继续实践插入排序排序的两种:直接插入排序和希尔排序算法. -----直接插入排序 package com.sort; /** * 直接插入排序 * * @author weixing-yang * * 算法思路: * 每步将一个待排序的元素,插入到前面已排序好的一组元素中的适当位置, * 直到所有元素全部出入完成为止. */ public class InsertionSort { public void insertionSort(in

数据结构复习之--“插入排序”-JAVA实现

菜鸟中的菜鸟一枚,面临找工作,复习下数据结构,写的插入排序算法记录一下,每天写一点,不断积累吧! import java.util.Scanner; /** * * @author DL * 数据结构复习之插入排序练习程序 * */ public class SortTest { public static void main(String [] args){ Scanner sc = new Scanner(System.in); int totalNums = sc.nextInt();//

数据结构例程——插入排序之希尔排序

本文是[数据结构基础系列(9):排序]中第3课时[插入排序之希尔排序]的例程. 1.希尔排序 #include <stdio.h> #define MaxSize 20 typedef int KeyType; //定义关键字类型 typedef char InfoType[10]; typedef struct //记录类型 { KeyType key; //关键字项 InfoType data; //其他数据项,类型为InfoType } RecType; //排序的记录类型定义 void

复习数据结构:排序算法(一)——插入排序

从这一篇开始,计划复习一下数据结构的基本知识.一来是为了开年之后的找工作,二来是为了想提升自己的编程能力.由于这些数据结构知识点,之前都学习过,这里我们就提炼出每个知识点的核心,以及代码实现. 这篇先说排序算法中的插入排序. 插入排序是一种稳定排序算法,属于内排序.适合少量数据量的排序. 当输入数组已经排好序时,插入排序需要O(n),快排需要O(n^2). 当输入数组倒序排列时,插入排序时复为:O(n^2). 平均时间复杂度:O(n^2). 代码实现如下: #include<iostream>

复习数据结构:排序(一)——插入排序

从这一篇开始,我开始复习数据结构的知识点,博文主要偏重于每个知识点的核心思想,以及代码实现.这一篇先从排序算法中的插入排序开始. 稳定排序.内排序.适合少量数据量的排序. 当输入数组已经排好序时,插入排序需要O(n),快排需要O(n^2). 当输入数组倒序排列时,插入排序时复为:O(n^2). 平均时间复杂度:O(n^2). 插入排序的基本做法是:将一个数插入到一个已经排列好的数组中,通过移动这个数的位置,使得插入之后的数组也是有序的,不断重复这个过程,使得最终所有的数都是有序的. 实现代码如下

[数据结构和算法]折半插入排序算法笔记

/// <summary> /// 步骤: /// 1.记录当前待排元素 /// 2.标记顺序表有序查找区域下界和上界 /// 3.在顺序表有序查找区域中折半查找等待排序元素的位置 /// 4.把顺序表有序查找区域的某些元素后移一位,以空出位置给等待排序的元素 /// 5.在空出的位置填写当前排序元素 /// </summary> /// <param name="elements"></param> static void SqList

数据结构的故事之插入排序

好久没写点什么了,最近很多企业都在招实习生,周围很多人也都开始到处投简历找实习了,搞的我们人心惶惶的,压力好大.尤其最近互联网好像很火的样子,作为传统通信行业的烟酒僧们,也都放弃了自己的老本行,开始投向了软开的队伍. 只可惜我们学的是<信号与系统>.<通信原理>这种底层的理论的通信课程,虽然看起来高大上,其实也就莫过于调制解调编码解码了.虽然也是从大一就开始学C语言,但是跟计算机比起来,无论各方面都相差甚远.说多了都是泪啊!!还是拿起数据结构踏踏实实地打好基础吧! 排序是数据结构里

10-3-二路插入排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第10章  内部排序 - 2-路插入排序 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? SequenceListType.c        相关测试数据下载  链