插入排序

第一个元素看成一个长度为1按值有序的子序列,然后只要一次从第二个元素开始逐个把其余的n-1个元素插入到某个按值有序的子序列中就可以了。

#include <stdio.h>

int main(){
	int n,K[101];
	printf("要输n的个数:\n");
	scanf("%d",&n);
	printf("请输入%d个数值",n);
	for (int i=0;i<n;i++)
	{
		scanf("%d",&K[i]);
	}

	for (i=1;i<n;i++) //n-1次排序
	{
		int temp = K[i]; //保存第i个数值
		int j = i-1; //j为从第j个开始被比较的元素 同时,意味着temp的元素位置始终在j之前
		while(j>=0 && temp<K[j]) //如果找到第j+1位置上的元素大于temp意味着,跳出循环,同时,j的位置上放上temp的值
			K[j+1] = K[j--];  //如果temp的值比j+1位置上的小,那么从第j+1位上的元素移动到j+2的位置上,一直到j<0或者temp的值大于等于K[j]的值,此时,temp的值应该放在K[j+1]上
        K[j+1] = temp;
	}
	for (i=0;i<n;i++)
	{
		printf("%d ",K[i]);
	}
}
posted @ 2018-10-04 21:31  Philtell  阅读(76)  评论(0编辑  收藏  举报