Chinaunix首页 | 论坛 | 博客
  • 博客访问: 185178
  • 博文数量: 49
  • 博客积分: 635
  • 博客等级: 中士
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-25 12:58
文章分类

全部博文(49)

文章存档

2012年(9)

2011年(40)

分类: C/C++

2011-08-29 12:05:30

从C算法上面摘抄下来的,改进之后的算法 ,主要思路是,先将最小元素放在地一位,然后从第三个元素开始,对于每一个元素,向前比较,并向后移动,直到遍历到合适位置,执行替换操作(并不是交换)。
代码如下:
  1.   1 #include <stdio.h>
  2.   2 #include <stdlib.h>
  3.   3
  4.   4 typedef int item;
  5.   5
  6.   6 #define key(A) (A)
  7.   7 #define less(A, B) (key(A) < key(B))
  8.   8 #define exch(A, B) {item t = A; A = B; B = t;}
  9.   9 #define compexch(A, B) if(less(B, A)) exch(A, B)
  10.  10
  11.  11 void insertion(item a[], int left, int right)
  12.  12 {
  13.  13 int i, j;
  14.  14 item tmp;
  15.  15 for(i = left+1; i <=right; i++)
  16.  16 compexch(a[left], a[i]);
  17.  17
  18.  18 for(i = left+2; i <= right; i++)
  19.  19 {
  20.  20 j = i;
  21.  21 tmp = a[i];
  22.  22 while(less(tmp, a[j-1]))
  23.  23 {
  24.  24 a[j] = a[j-1];
  25.  25 j--;
  26.  26 }
  27.  27 a[j] = tmp;
  28.  28 }
  29.  29 }

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