写这个算法的初衷是利用二分法排序为原型,借鉴C++的泛型的概念,写一个适合不同数据结构,适用于数组和指针的插入和排序一体的程序,但是时间和经理有限,经验也差很多,最近又有其他工作,只好把已经完成的部分贴出来,希望大家能够指正和完善,多多提出宝贵建议,谢谢。
//插入排序函数,v0.0
#include "stdafx.h"
//定义不同的数据结构,用户也可以自己定义
typedef int DataType;
//比较函数
int CompareDate(DataType Src, DataType Des)
{
if(Src>Des)
return 1;
else if(Src<Des)
return -1;
else
return 0;
}
//排序函数
bool CenFind(DataType TempNode, DataType *tHead, long &from , long &to,long &mid,int(*fn)(DataType ,DataType))
{
int i = 0;
DataType tCen = NULL;
mid = (from + to)/2;
tCen = tHead[mid];
i = fn(TempNode ,tCen );
if(i>0)
{
from = mid + 1;
if( (mid == from)||(mid == to))
return false;
CenFind(TempNode,tHead,from,to,mid,fn);
}
else if(i == 0)
{
return true;
}
else
{
to = mid - 1;
if( (mid == from)||(mid == to))
return false;
CenFind(TempNode,tHead,from,to,mid,fn);
}
}
int main(int argc, char* argv[])
{
DataType WholeDate[10] ;
DataType *tHead = NULL;
tHead = &WholeDate[0];
int i;
for(i = 0;i<10;i++)
{
WholeDate[i]=-1;
}
DataType Temp;
long from,to,mid;
long length=0;
for(i = 0;i<8;i++)
{
from = 0;
to = length;
mid = 0;
printf("DataType=");
scanf("%d",&Temp);
if(length==0)
{
WholeDate[length] = Temp;
length++;
}
else
{
if(CenFind(Temp, tHead, from , to,mid,CompareDate))
{
}
else
{
if(mid == length)
{
//add
/*for(int t = length; t>=to; t--)
{
WholeDate[t+1] = WholeDate[t];
}
WholeDate[to] = Temp;*/
WholeDate[length] = Temp;
}
else
{
//insert
for(int t = length; t>=to+1; t--)
{
WholeDate[t+1] = WholeDate[t];
}
WholeDate[to+1] = Temp;
}
length++;
}
}
}
for(i = 0;i<10;i++)
{
printf("WholeDate[%d] = %d\n",i,WholeDate[i]);
}
printf("Hello World!\n");
return 0;
}