【常用代码】折半插入算法

王道的折半插入排序的代码太难懂了,上网搜了个这个看着比较好用
并且这个算法应该是不稳定的,同样的数值,后进来的插到前面去了。

// C program for implementation of
// binary insertion sort
#include 

// A binary search based function
// to find the position
// where item should be inserted
// in a[low..high]
int binarySearch(int a[], int item,
				int low, int high)
{
	if (high <= low)
		return (item > a[low]) ?
				(low + 1) : low;

	int mid = (low + high) / 2;

	if (item == a[mid])
		return mid + 1;

	if (item > a[mid])
		return binarySearch(a, item,
							mid + 1, high);
	return binarySearch(a, item, low,
						mid - 1);
}

// Function to sort an array a[] of size 'n'
void insertionSort(int a[], int n)
{
	int i, loc, j, k, selected;

	for (i = 1; i < n; ++i)
	{
		j = i - 1;
		selected = a[i];

		// find location where selected should be inserted
		loc = binarySearch(a, selected, 0, j);

		// Move all elements after location to create space
		while (j >= loc)
		{
			a[j + 1] = a[j];
			j--;
		}
		a[j + 1] = selected;
	}
}

// Driver Code
int main()
{
	int a[]
		= { 37, 23, 0, 17, 12, 72, 31, 46, 100, 88, 54 };
	int n = sizeof(a) / sizeof(a[0]), i;

	insertionSort(a, n);

	printf("Sorted array: \n");
	for (i = 0; i < n; i++)
		printf("%d ", a[i]);

	return 0;
}

原文链接:Binary Insertion Sort

你可能感兴趣的:(数据结构,笔记,算法,数据结构)