(排序算法)linux c语言实现二分插入排序算法(简化版本的插入排序算法)

 二分插入算法是在已经排序好的序列里插入一个元素,是稳定的算法,关键词是折中。

比如说我要在12345678910里插入一个3,那么我先看看中间的数比3大,还是比3小,要是比3大,我就去后一半,如果是比3小,我就去前一半,现在进入某个一半后,再做如此操作,最后将其他的元素依次往后挪一位就可以了。

二分插入算法是没有排序功能的,只有插入功能。

/***************************************************
##filename      : binaryinsert.c
##author        : GYZ                               
##e-mail        : [email protected]                 
##create time   : 2018-10-31 09:54:39
##last modified : 2018-11-02 12:18:44
##description   : NA                                
***************************************************/
#include                                   
#include                                  
#include                                  
#include 
#include 
                                                    
void binaryInsert(int a[],int n)
{
	/*1,binary insert sort*/
	int left,middle,right;
	int i,temp;
	
	left = 0;
	right = n-2;
	temp = a[n-1];
	middle = (left + right)/2;
	while((middle >left) && (middle < right))
	{
		if(a[middle] == temp)
		{
			break;
		}
		else if (a[middle] > temp)
		{
			right = middle;
		}
		else
		{
			left = middle;
		}
		middle = (left + right)/2;
	}
	/*2,move others to right*/
	for(i = n-1; i > middle+1; i--)
	{
		a[i] = a[i-1];
	}
	a[middle+1] = temp;
	/*straight insertion sort*/

	/*	int temp = 0;
	int i = 0,j = 0;
	
	for(i = 1; i < n; ++i)
	{
		temp = a[i]; 
		for(j = i-1; j >= 0; --j)  
		{
			if(temp < a[j])
			{
				a[j+1] = a[j];
				a[j] = temp;
			}
			else
			{
				break;
			}
		}
	}*/
}
void printArr(int a[],int n)
{
	int i;
	for(i = 0; i < n; i++)
	{
		printf("%d,",a[i]);
	}                      
	printf("\n");                             

}                                                    
int main(int argc,char *argv[])                     
{                                                   
	int length = 0;
	int begin,end;

	int a[] = {1,2,3,4,5,6,7,8,9,10,
				11,12,13,14,15,16,17,
				18,19,20,21,22,23,24,
				25,26,27,28,29,30,31,32,14};
	
	length = sizeof(a) / sizeof(a[0]);
	begin = clock();
	binaryInsert(a,length);
	end = clock();
	printf("%d\n",end-begin);
	printArr(a,length);

	return 0;                                       
}                                                   
                                                    
                                                    

 

你可能感兴趣的:(C和C++编程学习)