插入排序基本思想:将需要排序的数据分成有序区与无序区,默认的第一个有序区是第一个元素。然后依次排序不断扩大有序区,缩小无序区。通过将无序区第一个数据与有序区内数据比较,找到他的位置,然后将有序数据向后移动,将那个数据放到有序区的相应位置就可以了。知道比较到无序区的最后一个数据结束。
但是由于每次比较需要移动大块数据,所以需要使用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 }