插入排序

插入排序基本思想:将需要排序的数据分成有序区与无序区,默认的第一个有序区是第一个元素。然后依次排序不断扩大有序区,缩小无序区。通过将无序区第一个数据与有序区内数据比较,找到他的位置,然后将有序数据向后移动,将那个数据放到有序区的相应位置就可以了。知道比较到无序区的最后一个数据结束。

但是由于每次比较需要移动大块数据,所以需要使用memmove来操作。

View Code
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 typedef int DataType;
 5 void insert_snort(DataType data[],int lt,int rt)
 6 {
 7        int i,j,k;
 8        DataType key;
 9        for(i=lt+1;i<=rt;i++){
10                 key = data[i];
11                 j = i-1;
12                 while(j>= lt && data[j] > key){
13                                 data[j+1] = data[j];
14                                 j--;
15                 }
16                 data[j+1] = key;
17        }
18 }
19 
20 void insert_snort_high(DataType data[],int lt,int rt)
21 {
22        int i,j,k;
23        DataType key;
24        for(i=lt+1;i<=rt;i++){
25                 key = data[i];
26                 j = i-1;
27                 while(j>= lt && data[j] > key){
28                                 j--;
29                 }
30                 memmove(data+j+2,data+j+1,(i-j-1)*sizeof(DataType));
31                 data[j+1] = key;
32        }
33 }
34 
35 int main()
36 {
37         int i=0;
38         int data[10]={2,6,8,4,9,3,5,1,7,12};
39         insert_snort(data,0,9);
40         for(i=0;i<10;i++){
41                 printf("%d ",data[i]);
42         }
43         printf("\n");
44         return 0;
45 }

 

posted @ 2012-10-25 20:23  北海石松  阅读(200)  评论(0编辑  收藏  举报