Chinaunix首页 | 论坛 | 博客
  • 博客访问: 930998
  • 博文数量: 177
  • 博客积分: 8613
  • 博客等级: 中将
  • 技术积分: 2835
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-12 04:16
文章分类
文章存档

2012年(12)

2011年(24)

2010年(24)

2009年(75)

2008年(42)

我的朋友

分类: C/C++

2009-06-29 20:48:44

    先把代码列一下,看了大半个晚上,请教了bi的高手才搞了个大概明白,不容易啊:
[root@vm c-study]# cat -n sort.c
     1  #include
     2
     3  #define LEN 5
     4  int a[LEN] = { 10, 5, 2, 4, 7 };
     5
     6  void insertion_sort(void)
     7  {
     8
     9          int i,j,key;
    10          for (i=1; i    11                  printf("%d, %d, %d, %d, %d\n",
    12                                  a[0], a[1], a[2], a[3], a[4]);
    13
    14                  key = a[i];
    15                  j = i-1;
    16                  while (j >= 0 && a[j] >key){
    17                          a[j+1] = a[j];
    18                          j--;
    19                  }
    20                  a[j+1] = key;
    21          }
    22
    23          printf("%d, %d, %d, %d, %d\n",
    24                          a[0], a[1], a[2], a[3], a[4]);
    25
    26  }
    27
    28  int main(void)
    29  {
    30          insertion_sort();
    31          return 0;
    32  }

    《一站式》上面引用了《算法导论》上面的打牌的图片,来说明插入排序的思想,总结一下要点:
1、整个排序有两层循环,第一层从原始数据(数组a)的第二个元素开始
2、在进行第二层循环之前,先把需要排序的元素赋给key,用这个key去和前面的元素逐个去比较,知道前面的某一个不再比key大,这时候就把a[j+1]的值设为key,否则的话,前面的值都后移
3、算法中关键的思想是先赋值,对前面的元素,依次根据对这个值的比较进行后移,最后找到在何处把key插入,这样完成排序。

阅读(488) | 评论(0) | 转发(0) |
0

上一篇:打印直方图

下一篇:进制转换

给主人留下些什么吧!~~