常用排序算法

typedef int DataType;

typedef struct
{
	DataType *data;
	int iLength;
	int iAllocatedSpace;
}SqList;

/************************************************************************
函数名:  DirectInsertSort
作  者:	 谭友亮(Charles Tan)
日  期:	 2013-4-12
作  用:  假设共有m个数据,已经排序的数据n(1<=n<m)个,从未排序数据中取出一个数据,
		 插入都已排序数据的适当位置,重复这个过程,直到n=m
形参数:  
返回值:                                              
************************************************************************/
void DirectInsertSort(SqList& sqList)
{
	int i, j;
	DataType temp;

	for(i = 1; i < sqList.iLength; i++)
	{
		j = i - 1;
		temp = sqList.data[i];

		while(j >= 0 && sqList.data[j] > temp)
		{
			sqList.data[j + 1] = sqList.data[j];
			j--;
		}

		sqList.data[j + 1] = temp;
	}
}

/************************************************************************
函数名:  BinaryInsertSort
作  者:	 谭友亮(Charles Tan)
日  期:	 2013-4-12
作  用:  二分法插入排序
形参数:  
返回值:                                              
************************************************************************/
void BinaryInsertSort(SqList& sqList)
{
	int i, j;
	int low, high, mid;
	DataType temp;

	for(i = 1; i < sqList.iLength; i++)
	{
		low = 0;
		high = i - 1;
		temp = sqList.data[i];

		while(high >= low)
		{
			mid = (low + high) / 2;
			if (sqList.data[mid] < temp)
			{
				low = mid + 1;
			}
			else
			{
				high = mid - 1;
			}
		}

		for(j = low; j < i; j++)
		{
			sqList.data[j + 1] = sqList.data[j];
		}
		sqList.data[low] = temp;
	}
	
}

/************************************************************************
函数名:  ShellSort
作  者:	 谭友亮(Charles Tan)
日  期:	 2013-4-12
作  用:  
形参数:  
返回值:                                              
************************************************************************/
void ShellSort(SqList& sqList)
{
	int i, j;
	DataType temp;
	int d = sqList.iLength / 2;

	while(d >= 1)
	{
		for(i = d; i < sqList.iLength; i++)
		{
			j = i - d;
			temp = sqList.data[i];

			while(j >= 0 && sqList.data[j] > temp)
			{
				sqList.data[j + d] = sqList.data[j];
				j = j - d;
			}
			sqList.data[j + d] = temp;
		}

		d = d / 2;
	}
}

/************************************************************************
函数名:  SimpleSelectionSort
作  者:	 谭友亮(Charles Tan)
日  期:	 2013-4-12
作  用:  
形参数:  
返回值:                                              
************************************************************************/
void SimpleSelectionSort(SqList& sqList)
{
	int i, j, minIndex;
	DataType minValue;

	for(i = 0; i < sqList.iLength - 1; i++)
	{
		minIndex = i;
		minValue = sqList.data[i];
		for(j = i + 1; j < sqList.iLength; j++)
		{
			if (minValue > sqList.data[j])
			{
				minIndex = j;
			}
		}

		if (minIndex != i)
		{
			sqList.data[i] = sqList.data[minIndex];
			sqList.data[minIndex] = minValue;
		}
	}
}

/************************************************************************
函数名:  HeapSort
作  者:	 谭友亮(Charles Tan)
日  期:	 2013-4-12
作  用:  
形参数:  
返回值:                                              
************************************************************************/
void HeapSort(SqList& sqList)
{
	int i;
	
	for(i = 0; i < sqList.iLength; i++)
	{
	}
}

/************************************************************************
函数名:  BubbleSort
作  者:	 谭友亮(Charles Tan)
日  期:	 2013-4-12
作  用:  
形参数:  
返回值:                                              
************************************************************************/
void BubbleSort(SqList& sqList)
{
	int i, j;
	DataType temp;

	for(i = 0; i < sqList.iLength; i++)
	{
		for(j = 0; j < sqList.iLength; j++)
		{
			if (sqList.data[j] > sqList.data[j + 1])
			{
				temp = sqList.data[j];
				sqList.data[j] = sqList.data[j + 1];
				sqList.data[j + 1] = temp;
			}
		}
	}
}

int Partion(DataType data[], int low, int high)
{
	int i = low, j = high;
	DataType temp = data[low];

	while(i < j)
	{
		while(i < j && data[j] >= temp)
		{
			j--;
		}
		data[i] = data[j];

		while(i < j && data[i] <= temp)
		{
			i++;
		}
		data[j] = data[i];
	}
	data[i] = temp;

	return i;
}

void Qsort(DataType sqList[], int low, int high)
{
	int k;

	if (low < high)
	{
		k = Partion(sqList, low, high);
		Qsort(sqList, low, k - 1);
		Qsort(sqList, k + 1, high);
	}
}

/************************************************************************
函数名:  QuickSort
作  者:	 谭友亮(Charles Tan)
日  期:	 2013-4-12
作  用:  
形参数:  
返回值:                                              
************************************************************************/
void QuickSort(SqList& sqList)
{
	Qsort(sqList.data, 0, sqList.iLength - 1);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值