折半插入排序

Description
折半插入排序同样是一种非常简单的排序方法,
它的基本操作是在一个已经排好序的有序表中
进行查找和插入。不难发现这个查找的过程可以
十分自然的修改成折半查找的方式进行实现。
折半插入排序的算法可以描述如下:
折半插入排序_第1张图片
在本题中,读入一串整数,将其使用以上描述
的折半插入排序的方法从小到大排序,并输出。

Input
输入的第一行包含1个正整数n,表示共有n个整
数需要参与排序。其中n不超过1000。
第二行包含n个用空格隔开的正整数,表示n个
需要排序的整数。

Output
只有1行,包含n个整数,表示从小到大排序完
毕的所有整数。
请在每个整数后输出一个空格,并请注意行尾
输出换行。

Sample Input

10

2 8 4 6 1 10 7 3 5 9

Sample Output

1 2 3 4 5 6 7 8 9 10

#include
void BinSort(int *a,int n)
{
	for(int i=1;i;i++)
	{
		int low=0,high = i-1,mid;
		while(low<=high)
		{
			mid = (low+high) / 2;  
			if(a[i]<=a[mid])
				high = mid - 1;
			else
				low = mid + 1;   
		}
		int temp = a[i];  
		for(int j=i;j>low;j--)
			a[j] = a[j-1];  
		a[low] = temp;
	}
}
int main(void)
{
	int n,i;
	scanf("%d",&n);
	int a[n];
	for(i = 0;i < n;i++)
	{
		scanf("%d",&a[i]);
	}
	BinSort(a,n);
	for(i=0;i;i++)
		printf("%d ",a[i]);
	return 0;
}

你可能感兴趣的:(C语言,c语言)