插入排序

原理:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子列表当中的适当位置,直到全部记录插入完成为止。对直接插入排序我的理解就是:先将第一个记录视为一个有序序列,然后依次将后面的记录插入到这个有序序列中来。每次要插入的记录时,须从后往前依次比较有序序列中的记录,直到找到在有序序列中的位置,记录下该位置,该位置开始的每个记录都后移一位,然后将插入记录插入该位置。这样每插入一个记录进去,有序序列长度加1,剩余记录减1,直到所有记录都插入到有序序列中,排序完成。例如每次将当前排序的i依次和i-1之前的数据作比较,符合则交换条件,不符合则插入,结束比较,i+1;


时间复杂度分析:最好情况下为O(n),最坏情况下为O(n*n)。比较次数期望为n*n/4。

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


c#脚本实现:

private static int[] InsertSort(int[] myArray)
{
    int i, j,temp;
    for (i = 1; i < myArray.Length; i++)
    {
        temp = myArray[i];//保存当前数据,当前数据即待插入的数据        
        //将数组标号i及i之前的元素,排成递增序列
        for (j = i - 1; j >= 0; j--)
        {
            if( myArray[j] >temp)
            {
                myArray[j + 1] = myArray[j];
            }else{
                break;
            }            
        }
      myArray[j + 1] = temp;
    }
}

 

posted @ 2018-01-20 16:45  柯腾_wjf  阅读(97)  评论(0编辑  收藏  举报