常用排序算法
来源:互联网 发布:anime studio mac 编辑:程序博客网 时间:2024/05/18 01:44
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);}