C语言算法 直接插入排序

直接插入排序:
每次从无序表(原数组)中取出下一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
具体方法是第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后比较,把第三个数按大小插入到有序表中;推而广之,进行了(n-1)趟扫描以后就完成了整个排序过程
它是由两层嵌套循环组成的,外层循环标识并决定待比较的数值次数,内层循环为待比较数值确定其最终位置。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。

#include 
void insort (int s[],int n)//自定义排序函数 insort 
{
	int i,j;
	for (i=2;i<=n;i++)
		{
			s[0]=s[i];//s[0] 做监视哨 每次 比较 为其赋值
			j=i-1;		//建立 循环变量i的副本 从右往左比较
			while (s[0] < s[j])
				{
					s[j+1]=s[j];
					j--;
				}
			s[j+1]=s[0];//在 确定好的位置 上插入 s[i]
		}
}
void main()
{
	int a[11];
	int i;
	printf("请输入 10 个数据:");
	for (i=0;i<10;i++)
		scanf("%d",&a[i]);
	printf("原始顺序是: ");
	for (i=0;i<10;i++)
		printf("%3d",a[i]);
	insort(a,10);//调用 自定义函数 insort()
	printf("\n插入数据排序后的顺序是:");
	for (i=0;i<10;i++)
		printf("%3d",a[i]);
	printf("\n"); 
}

你可能感兴趣的:(C语言算法 直接插入排序)