c# 实现直接插入排序算法-升序
数据结构中的排序算法有好几种,对其中的直接插入排序算法 总结如下所示:
直接插入排序即是:顺序地把待排序的各个记录按其关键字插入到已排序后的适当位置处。
实例如下所示:
定义的数组 : {23,34,56,78,65,90,88,92,18,21}
过程如下所示:
【23】 34 56 78 65 90 88 92 18 21
第 1 次排序结果: 【23 34】 56 78 65 90 88 92 18 21
——用34插入到【23】序列中,34>23,故插入后的顺序是【23,34】
第 2 次排序结果: 【 23 34 56 】78 65 90 88 92 18 21
——用56插入到【23,34】序列中,56>34,故插入后的顺序是【23,34,56】
第 3 次排序结果: 【23 34 56 78】65 90 88 92 18 21
——用78插入到【23,34,56】序列中,78>56,故插入后的顺序是【23,34,56,78】
第 4 次排序结果: 【23 34 56 65 78 】90 88 92 18 21
——用65插入到【23,34,56,78】序列中,65<78,所以78后移一位,和56比较,65>56,故插入后的顺序是【23,34,56,65, 78】
第 5 次排序结果: 【23 34 56 65 78 90 】 88 92 18 21
——用90插入到【23,34,56,65, 78】序列中,78<90 ,故插入后的顺序是【23 34 56 65 78 90 】
第 6 次排序结果: 23 34 56 65 78 88 90 92 18 21
——用88插入到【23 34 56 65 78 90 】序列中,90>88 ,所以90后移一位,故插入后的顺序是【23 34 56 65 78 88 90】
第 7 次排序结果: 23 34 56 65 78 88 90 92 18 21
——用92插入到【23 34 56 65 78 90 】序列中,90<92 ,故插入后的顺序是【23 34 56 65 78 90 92 】
第 8 次排序结果: 18 23 34 56 65 78 88 90 92 21
——用18插入到【23 34 56 65 78 90 92 】序列中,18<92,所以92后移一位,和90比较,90>18,依次后移,直到第一位23,因为18<23, 故插入后的顺序是【18 23 34 56 65 78 88 90 92】
第 9 次排序结果: 18 21 23 34 56 65 78 88 90 92
——用21插入到【23 34 56 65 78 90 92 】序列中,21<92,故92后移一位,和90比较,90>21,依次后移,直到第一位18,因为18<21, 故插入后的顺序是【18 21 23 34 56 65 78 88 90 92】
----------------
以上为直接插入排序算法的具体实例分析:
算法相对简单易懂,就是使用C#实现直接插入算法,进行升序排序。
/// <summary> /// 找一找教程网 http://www.zyiz.net/tech/list-101.html /// </summary> /// <param name="args"></param> static void Main(string[] args) { int[] arr = { 17,392,68,36,291,776,843,255}; ZhiJieChaRuPaiXu(arr,8); Console.ReadKey(); } /// <summary> /// 直接插入排序,升序排序 /// </summary> /// <param name="arr"></param> /// <param name="n"></param> static void ZhiJieChaRuPaiXu(int [] data ,int n) { // 找一找教程网 http://www.zyiz.net/tech/list-101.html Console.WriteLine($"arr={string.Join(" , ", data)}"); int i, j; for( i=1;i<n;i++) { //最外层 if (data[i] < data[i - 1]) { //若第2个元素小于前一个元素,则需要插入和挪位置 int tmp = data[i]; data[i] = data[i - 1]; for( j=i-2;j>=0 && data[j]>tmp;j--) { //将这些元素统统后移 data[j+1] = data[j]; } data[j+1] = tmp; } } Console.WriteLine($"-----------------------------------------------------"); Console.WriteLine($"arr={string.Join(" , ", data)}"); }
作者:沐雪
文章均系作者原创或翻译,如有错误不妥之处,欢迎各位批评指正。本文版权归作者和博客园共有,如需转载恳请注明。
如果您觉得阅读这篇博客让你有所收获,请点击右下方【推荐】
为之网-热爱软件编程 http://www.weizhi.cc/