C#数据结构与算法系列(二十):插入排序算法(InsertSort)
1.介绍
插入排序算法属于内部排序算法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的
2.思想
插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,
无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
3.思路图
4.代码演示
using System; namespace DataStructure
{
public class InsertSort
{
public static void Test()
{
int[] arr = { , , , }; Console.WriteLine($"排序的数组:{ArrayToString(arr)}"); Console.WriteLine("\n封装后的插入排序"); Sort(arr); Console.WriteLine("\n封装前的插入排序"); arr = new int[] { , , , }; {
int insertValue = arr[]; int insertIndex = - ; while (insertIndex >= && insertValue < arr[insertIndex])
{
arr[insertIndex + ] = arr[insertIndex]; insertIndex--;
} if (insertIndex + != )
{
arr[insertIndex + ] = insertValue;
} Console.WriteLine($"\n第{1}轮排序后的结果:{ArrayToString(arr)}");
}
{
int insertValue = arr[]; int insertIndex = - ; while (insertIndex >= && insertValue < arr[insertIndex])
{
arr[insertIndex + ] = arr[insertIndex]; insertIndex--;
} if (insertIndex + != )
{
arr[insertIndex + ] = insertValue;
} Console.WriteLine($"\n第{2}轮排序后的结果:{ArrayToString(arr)}");
} {
int insertValue = arr[]; int insertIndex = - ; while (insertIndex >= && insertValue < arr[insertIndex])
{
arr[insertIndex + ] = arr[insertIndex]; insertIndex--;
} if (insertIndex + != )
{
arr[insertIndex + ] = insertValue;
} Console.WriteLine($"\n第{3}轮排序后的结果:{ArrayToString(arr)}");
}
} /// <summary>
/// 插入排序封装
/// </summary>
/// <param name="arr"></param>
private static void Sort(int[] arr)
{
//要循环的次数
for (int i = ; i < arr.Length; i++)
{
//设置待插入的值
int insertValue = arr[i]; //设置待插入的索引
int insertIndex = i - ; //1.insertIndex >= 0保证在给insertValue找插入位置不越界
//2.insertValue < arr[insertIndex] 待插入的数,还没有找到插入位置
//也就是说当待插入的值与前一个值比较,如果小于那么就把值后移
while (insertIndex >= && insertValue < arr[insertIndex])
{
arr[insertIndex + ] = arr[insertIndex]; //一直与前一个比较,知道索引到0
insertIndex--;
} //当索引位置变了后,就说明插入位置找到
if (insertIndex + != i)
{ arr[insertIndex + ] = insertValue;
} Console.WriteLine($"\n第{i}轮排序后的结果:{ArrayToString(arr)}");
}
} /// <summary>
/// 将数组转换成String
/// </summary>
/// <param name="arr"></param>
/// <returns></returns>
public static string ArrayToString(int[] arr)
{ string result = ""; for (int i = ; i < arr.Length; i++)
{
result += arr[i] + ",";
} return result;
}
}
}
5.结果图
C#数据结构与算法系列(二十):插入排序算法(InsertSort)的更多相关文章
- Web 开发人员和设计师必读文章推荐【系列二十九】
<Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发人员和设计师必读文章推荐【系列二十八】
<Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发人员和设计师必读精华文章【系列二十六】
<Web 前端开发精华文章推荐>2014年第5期(总第26期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】
<Web 前端开发精华文章推荐>2014年第一期(总第二十二期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML ...
- Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十】
<Web 前端开发精华文章推荐>2013年第八期(总第二十期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...
- 【数据结构】 最小生成树(二)——kruskal算法
上一期说完了什么是最小生成树,这一期咱们来介绍求最小生成树的算法:kruskal算法,适用于稀疏图,也就是同样个数的节点,边越少就越快,到了数据结构与算法这个阶段了,做题靠的就是速度快,时间复杂度小. ...
- 排序系列 之 折半插入排序算法 —— Java实现
基本思想: 折半插入算法是对直接插入排序算法的改进,排序原理同直接插入算法: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中 ...
- CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现
CRC16算法系列文章: CRC16算法之一:CRC16-CCITT-FALSE算法的java实现 CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现 CRC16算法之三:CR ...
- SSE图像算法优化系列二十四: 基于形态学的图像后期抗锯齿算法--MLAA优化研究。
偶尔看到这样的一个算法,觉得还是蛮有意思的,花了将近10天多的时间研究了下相关代码. 以下为百度的结果:MLAA全称Morphological Antialiasing,意为形态抗锯齿是AMD推出的完 ...
- SSE图像算法优化系列二十二:优化龚元浩博士的曲率滤波算法,达到约1000 MPixels/Sec的单次迭代速度
2015年龚博士的曲率滤波算法刚出来的时候,在图像处理界也曾引起不小的轰动,特别是其所说的算法的简洁性,以及算法的效果.执行效率等方面较其他算法均有一定的优势,我在该算法刚出来时也曾经有关注,不过 ...
随机推荐
- Java实现 LeetCode 558 四叉树交集(四叉树,第一次遇到,研究了半天)
558. 四叉树交集 四叉树是一种树数据,其中每个结点恰好有四个子结点:topLeft.topRight.bottomLeft 和 bottomRight.四叉树通常被用来划分一个二维空间,递归地将其 ...
- Java实现 蓝桥杯 算法训练 矩阵乘法
算法训练 矩阵乘法 时间限制:1.0s 内存限制:512.0MB 提交此题 问题描述 输入两个矩阵,分别是ms,sn大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均 ...
- Java实现 LeetCode 400 第N个数字
400. 第N个数字 在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, -中找到第 n 个数字. 注意: n 是正数且在32为整形范围内 ( n < 231 ...
- Java实现 蓝桥杯VIP 算法训练 数对
算法训练 数对 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,该程序从用户读入一个整数,然后列出所有的数对,每个数对的乘积即为该数. 输入格式:输入只有一行,即一个整数. 输出 ...
- Java实现 LeetCode 219 存在重复元素 II(二)
219. 存在重复元素 II 给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k. 示 ...
- Android中如何使用自定义对话框
自定义创建一个XML布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns ...
- java实现漏掉的账目明细
某财务部门结账时发现总金额不对头.很可能是从明细上漏掉了某1笔或几笔.如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗? 如果有多种可能,则输出所有可能的情况. 我们规定:用户输入的第一行是 ...
- opencl(2)平台、设备、上下文的获取与信息获取
1:平台 1)获取平台id cl_int clGetPlatformIDs( cl_uint num_entries, //想要获取的平台数 cl_platform_id * flatfor ...
- WPF样式学习第一天
因为上班的公司要我用wpf写软件,刚毕业出来,学校也没教过wpf,只会winform,再加上wpf用winform的框架写法也能实现很多需求,但是就不能体现wpf的优点了,今天就先来学wpf的样式,因 ...
- ASP.NET Core 3.1 WebApi部署到腾讯云CentOS 7+Docker
一.准备 首先需要有一台CentOS服务器,安装最新版Docker,配置镜像加速等,安装方法网上很多,下面是一些相关指令: yum install -y yum-utils device-mapper ...