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)的更多相关文章

  1. Web 开发人员和设计师必读文章推荐【系列二十九】

    <Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  2. Web 前端开发人员和设计师必读文章推荐【系列二十八】

    <Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  3. Web 前端开发人员和设计师必读精华文章【系列二十六】

    <Web 前端开发精华文章推荐>2014年第5期(总第26期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  4. Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】

    <Web 前端开发精华文章推荐>2014年第一期(总第二十二期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML ...

  5. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十】

    <Web 前端开发精华文章推荐>2013年第八期(总第二十期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...

  6. 【数据结构】 最小生成树(二)——kruskal算法

    上一期说完了什么是最小生成树,这一期咱们来介绍求最小生成树的算法:kruskal算法,适用于稀疏图,也就是同样个数的节点,边越少就越快,到了数据结构与算法这个阶段了,做题靠的就是速度快,时间复杂度小. ...

  7. 排序系列 之 折半插入排序算法 —— Java实现

    基本思想: 折半插入算法是对直接插入排序算法的改进,排序原理同直接插入算法: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中 ...

  8. CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现

    CRC16算法系列文章: CRC16算法之一:CRC16-CCITT-FALSE算法的java实现 CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现 CRC16算法之三:CR ...

  9. SSE图像算法优化系列二十四: 基于形态学的图像后期抗锯齿算法--MLAA优化研究。

    偶尔看到这样的一个算法,觉得还是蛮有意思的,花了将近10天多的时间研究了下相关代码. 以下为百度的结果:MLAA全称Morphological Antialiasing,意为形态抗锯齿是AMD推出的完 ...

  10. SSE图像算法优化系列二十二:优化龚元浩博士的曲率滤波算法,达到约1000 MPixels/Sec的单次迭代速度

      2015年龚博士的曲率滤波算法刚出来的时候,在图像处理界也曾引起不小的轰动,特别是其所说的算法的简洁性,以及算法的效果.执行效率等方面较其他算法均有一定的优势,我在该算法刚出来时也曾经有关注,不过 ...

随机推荐

  1. Blazor WebAssembly 修仙之途 - 组件与数据绑定

    一.前言 在第一篇文章中,有提到过组件(Component)这个概念.组件在 Blazor 中是必不可少的,UI 全靠它组装起来,和前端的 JS 组件是一个意思,比如:vue component.re ...

  2. Java面向对象中this关键字详解 意义+实例讲解【hot】

    this关键字 >>>便于理解简单的定义 this关键字可以简单的理解为,谁调用this所在的方法,this就是谁. 类的构造函数与getter.setter方法常用到this关键字 ...

  3. Java实现 LeetCode 454 四数相加 II

    454. 四数相加 II 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0. 为 ...

  4. Java实现 LeetCode 404 左叶子之和

    404. 左叶子之和 计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 /** * Definiti ...

  5. CDN百科 | 假如没有CDN,网络世界会变成什么样?

    很多人都知道CDN是内容分发加速,所谓内容分发,就是将本来位于源站的内容分发到全国各地的节点,方便用户去就近访问所需的内容.随着移动互联网.云计算等一代代技术变革,CDN已经成为了缓解互联网网络拥塞. ...

  6. 你真的了解EF吗?关于EntityFramework的高级优化

    接上一篇文章.现在写程序,做项目不是说功能做完就完事了,在平常的开发过程中对于性能的考虑也是极其重要的. 关于ef的那些事,今天就来说说吧.首先必须得知道.net ef在程序中的五种状态变化过程与原理 ...

  7. 五月天的线上演唱会你看了吗?用Python分析网友对这场线上演唱会的看法

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:CDA数据分析师 豆瓣9.4分!这场线上演唱会到底多好看? 首先让我 ...

  8. 【图机器学习】cs224w Lecture 16 - 图神经网络的局限性

    目录 Capturing Graph Structure Graph Isomorphism Network Vulnerability to Noise 转自本人:https://blog.csdn ...

  9. 4.vue class 绑定- model基础应用

        //代码可以复制自行体验   <template>     <div id="app" @click.stop="test('你点击了我big- ...

  10. Python 图像处理 OpenCV (9):图像处理形态学开运算、闭运算以及梯度运算

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...