代码改变世界

妙趣横生算法 5:插入排序

2012-01-26 20:35  藯蓝枫叶  阅读(271)  评论(0编辑  收藏  举报

 

1、插入排序原理

image

 

2、程序代码

 

#include <stdio.h>

#define MAX 255
int R[MAX];
void Insert_Sort(int n)
{
	/*对数组R中的记录R[1..n]按递增序进行插入排序*/
	int i,j;
	for(i=2;i<=n;i++) /*依次插入R[2],..,R[n]*/
	{
		if(R[i]<R[i-1]) /*若R[i]大于等于有序区中所有的R,则R[i]应在原有位置上*/
		{
			R[0]=R[i];
			j=i-1;
			do
			{
				R[j+1]=R[j];/*将关键字大于R[i]的插入位置*/
				j--; 
			}while(R[0]<R[j]);/*当R[i]>=R[j]时终止*/
			R[j+1]=R[0];/*R[I]插入到正确的位置上*/	
		}	
	} 
}
int main(int argc, char *argv[])
{
	int i,n;
	printf("Please input total element number of the sequence:");
	scanf("%d",&n);
	if(n<=0||n>MAX)
	{
		printf("n must more than 0 and less than %d.\n",MAX);
		exit(0);
	}
	printf("Please input the elements one by one:");
	for(i=1;i<=n;i++)
	{
		scanf("%d",&R[i]);
	}
	printf("The sequence you input is :");
	for(i=1;i<=n;i++)
	{
		printf("4%d",R[i]);
	}
	Insert_Sort(n);
	printf("\n The sequene after insert_sort is:");
	for(i=1;i<=n;i++)
	{
		printf("%4d",R[i]);
	}
	printf("\n Press any key to quit....");
	getchar();	 
}