直接插入排序是一种比较简单的排序方法,它的基本操作是:假设排序的记录存储在数组C[1..n]中,在排序过程的某个时刻,C被划分为两个子区间,C[1..i-1]和C[i..n],其中前一个为已排好的有序区,而后一个为无序区,开始时有序区中只含有一个元素C[1],无序区中为C[2..n]。排序过程中,只需要每次从无序区中取出第一个元素,把它插入到有序区的适当位置,使之成为新的有序区,依次这样经过n-1次插入后,无序区为空,有序区包含了全部n个元素,至此排序完毕.用一个C示例说明如下

#include <stdio.h>
#include <stdlib.h>

/*直接插入排序练习*/

/*先定义一个无序数组*/

void InsertSort(int * c,int len);
void Show(int * c,int len);

int main(void){
	int zm[8]={2,5,30,6,11,13,16,15};
	int length=sizeof(zm)/sizeof(zm[0]);
//	printf("数组的长度是%d\n",length);
	InsertSort(zm,length);
	Show(zm,length);
	return 0;
}

void InsertSort(int * c,int len){   //插入排序
	int i,j,temp;
	for(i=1;i<len;i++){
		temp = c[i]; //当前记录先保存下
		j=i-1;
		while(temp<c[j] && j>=0){  //找插入位置
			c[j+1]=c[j];   //记录后移
			j--;
		}
		c[j+1]=temp;   //c[i]插入到正确位置

	}	
}

void Show(int * c,int len){
	int i;
	printf("新的数组是:\n");
	for(i=0;i<len;i++){
		printf("%d,",c[i]);
	}
}


程序执行结果如下:

wKiom1goZYPAHz1jAAArfaelpI4857.jpg-wh_50