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);
}
常用排序算法
最新推荐文章于 2023-06-30 19:45:37 发布