Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2114219
  • 博文数量: 249
  • 博客积分: 1305
  • 博客等级: 军士长
  • 技术积分: 4733
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-17 10:37
个人简介

不懂的东西还有很多,随着不断的学习,不懂的东西更多,无法消灭更多不懂的东西,那就不断的充实自己吧。 欢迎关注微信公众号:菜鸟的机器学习

文章分类

全部博文(249)

文章存档

2015年(1)

2014年(4)

2013年(208)

2012年(35)

2011年(1)

分类: C/C++

2012-02-16 17:22:16

一、插入排序算法的思想
     
    插入排序算法的基本思想如下:
    将n个元素的数列分为已有序和无序两个部分,如下所示:
  {,{a2,a3,a4,…,an}}
  {{a1(1),a2(1)},{a3(1),a4(1) …,an(1)}}
  …
  {{a1(n-1),a2(n-1) ,…}, {an(n-1)}}
  每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列的合适位置中。

二、插入排序算法的描述

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

三、C代码实现

  1. #include "stdio.h"
  2. /*
  3. * 函数:swap(int *a,int *b)
  4. * 功能:进行两个数的交换
  5. */
  6. void swap(int *a,int *b)
  7. {
  8.     int temp;
  9.     temp=*a;
  10.     *a=*b;
  11.     *b=temp;
  12. }
  13. /*
  14. * 函数:insert_sort(int *array, int n)
  15. * 功能:插入排序
  16. * 参数:n为数组元素的个数
  17. */
  18. void insert_sort(int array[],int n)
  19. {
  20.     int i,j;
  21.     int temp;
  22.     for(i=1;i<n;i++)
  23.     {
  24.         temp=array[i];
  25.         for(j=i;j>0 && temp<array[j-1];j--)
  26.         {
  27.             array[j]=array[j-1];
  28.         }
  29.         array[j]=temp;
  30.     }
  31. }

  32. int main(int argc,char *argv[])
  33. {
  34.     int array[]={3,8,3,7,1,2,5,6,4,90};
  35.     insert_sort(array,10);
  36.     for(int i=0;i<10;i++)
  37.     {
  38.         printf("%d ",array[i]);
  39.     }
  40.     printf("\n");
  41.     return 0;
  42. }
四、插入排序算法的时间复杂度
   
   插入排序的时间复杂度为O(n^2),是稳定的排序算法,适用于数量较少的排序。

阅读(1627) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

bangde322014-01-16 16:48:51

多谢楼主分享