zoukankan      html  css  js  c++  java
  • 排序算法--插入排序(Insertion Sort)_C#程序实现

    排序算法--插入排序(Insertion Sort)_C#程序实现

      排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题。例如,字典中的单词是以字母的顺序排列,否则,使用起来非常困难。同样,存储在计算机中的数据的次序,对于处理这些数据的算法的速度和简便性而言,也具有非常深远的意义。

    1.基本概念

      排序是把一个记录(在排序中把数据元素称为记录)集合或序列重新排列成按记录的某个数据项值递增(或递减)的序列。

    2插入排序(Insertion Sort)

      插入排序(direct Insert Sort)的基本思想是:顺序地将待排序的记录按其关键码的大小插入到已排序的记录子序列的适当位置。子序列的记录个数从1 开始逐渐增大,当子序列的记录个数与顺序表中的记录个数相同时排序完毕。 

    2.1算法描述

    一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

    • 从第一个元素开始,该元素可以认为已经被排序;
    • 取出下一个元素,在已经排序的元素序列中从后向前扫描;
    • 如果该元素(已排序)大于新元素,将该元素移到下一位置;
    • 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
    • 将新元素插入到该位置后;
    • 重复步骤2~5。

    2.2动态图演示

     

    2.3C#代码实现插入排序

    插入排序

     1         /// <summary>
     2         /// 插入排序
     3         /// </summary>
     4         /// <param name="array"></param>
     5         /// <returns></returns>
     6         private static int[] InsertSort(int[] array)
     7         {
     8             for (int i = 1; i < array.Length; i++)
     9             {
    10                 int insertVal = array[i];
    11                 int insertIndex = i - 1;
    12                 while (insertIndex >= 0 && insertVal < array[insertIndex])
    13                 {
    14                     array[insertIndex + 1] = array[insertIndex];
    15                     insertIndex--;      
    16                 }
    17                 array[insertIndex + 1] = insertVal;
    18                 printArray(array);
    19                 Console.WriteLine("" + (i) + "");
    20             }
    21             return array;
    22         }

    打印数组

     1         /// <summary>
     2         /// 打印数组
     3         /// </summary>
     4         /// <param name="array"></param>
     5         private static void printArray(int[] array)
     6         {
     7             if (array == null || array.Length <= 0)
     8             {
     9                 return;
    10             }
    11             for (int i = 0; i < array.Length; i++)
    12             {
    13                 Console.Write("["+array[i]+"]"+",");
    14             }
    15         }

    测试代码:

    1             //插入排序
    2             int[] arrayTest3 = new int[] { 9, 8, 5, 6, 7, 4, 3, 2, 1 };
    3             Console.WriteLine("
    ------------原数组--------------");
    4             printArray(arrayTest3);
    5             Console.WriteLine("
    ------------插入排序--------------");
    6             int[] resultArray3 = InsertSort(arrayTest3);
    7             Console.WriteLine("排序结果:");
    8             printArray(resultArray3);

    运行结果:

  • 相关阅读:
    wget下载https文件,服务器可以虚拟机中不行的问题
    FTP被动模式服务器端开有限的端口
    ZOJ
    HDU
    JAVA 大数 A+B问题
    A Simple Math Problem(矩阵快速幂)----------------------蓝桥备战系列
    Covering(矩阵快速幂)
    卡特兰数详讲(转)
    Just a Hook(线段树区间修改值)-------------蓝桥备战系列
    A Simple Problem with Integers(线段树区间更新复习,lazy数组的应用)-------------------蓝桥备战系列
  • 原文地址:https://www.cnblogs.com/JiYF/p/8849819.html
Copyright © 2011-2022 走看看