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