算法导论--第二章、插入排序

1. 插入排序类似于整理扑克牌(排列好顺序的扑克和待排序的扑克);

2. 插入排序(INSERTION-SORT)参数是一个数组A[1..n]共n个数,输入的各个数字原地排序(sorted in place),分为排好序的和待排序的,每次取一个待排序元素,找到插入的位置,插入已排好序的部分中。元素取完程序结束,复杂度O(n^2)

3. 伪代码如下:

INSERTION-SORT(A) 
for j <- 2 to length(A) 
    do key <- A[j] 
    //Insert A[j] into the sorted sequence A[1..j-1], A下标从1开始存储数据,其中下标1~j-1的数据是排好序的 
    i <- j-1 
    while i > 0 and A[i] > key    //i>0是控制与j之前所有数据比较的次数,A[i]>key控制数字是从小到大排列,当拍好数据的数大于key时,互相颠倒 
          do A[i + 1] <- A[i] 
           i <- i-1    //换下一个下标数据进行比较 
   A[i+1] <-key    //key比sorted序列的值都大,则key称为下一个sorted序列加入的数值

4. 具体C代码如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 void InsertSort(int A[]){
 5     int i, j;
 6     int key;
 7     
 8     for(j = 1; j < 6; j++){
 9         key = A[j];
10         i = j - 1;
11         
12         while(i >= 0 && A[i] > key){
13             A[i + 1] = A[i];
14             i--;
15         }
16         
17         A[i + 1] = key;
18     }
19 }
20 
21 
22 int main(){
23     int i;
24     int A[6] = {5, 2, 4, 6, 1, 3};
25     
26     printf("A[]...\n");
27     for(i = 0; i < 6; i++){
28         printf("%d ", A[i]);
29     }
30     
31     InsertSort(A);
32     
33     printf("\nafter A[]...\n");
34     for(i = 0; i < 6; i++){
35         printf("%d ", A[i]);
36     }
37     
38     system("pause");
39     return 0;
40 }

运行截图如下:

 

posted @ 2015-04-09 16:07  syd192  阅读(136)  评论(0编辑  收藏  举报