数据结构_直接插入排序法

 详细见这篇博客:http://www.cnblogs.com/skywang12345/p/3596881.html

直接插入排序介绍

      直接插入排序(Straight Insertion Sort)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。

      总结:三个for循环(完全个直接插入排序一模一样的思路,一个for循环找到直接插入的位置,一个for循环后移)

自己完成的完整代码:

#include"stdio.h"

/*
 * 直接插入排序
 * 2015-08-10:May
 * 参数说明:
 *     a -- 待排序的数组
 *     n -- 数组的长度
 */
void insert_sort(int a[], int n)
{
    int i, j, k;
    for(i=1;i<n;i++)
    {
        for(j=i-1;j>=0;j--)
        {
            if(a[i]>a[j])
            {
              break;//找到位置了,找到大于某个位置的地方就停下
            }
        }
        if(j!=i-1) // 找到位置了开始将位置后面的往后移,如果恰好就不用移动
        {
            int temp=a[i];//先将要插入的存起来,会被覆盖
            for(k=i-1;k>j;k--)
            {
                a[k+1]=a[k]; //都往后移动
            }
            a[j+1]=temp;  //插入进来;
        }

    }



}
void main(void)
{
    int a[]={5,8,3,1,12,1};
    insert_sort(a,6);
    for(int k=0;k<6;k++)
    {
      printf("%d ",a[k]);
    }


}
原文地址:https://www.cnblogs.com/snowwhite/p/4719450.html