MFC写的排序算法简单时间比较

来源:互联网 发布:oracle数据库加密 编辑:程序博客网 时间:2024/05/18 11:34

下载地址:http://yunpan.cn/cjftE6y6CCDQw  提取码 32d1

//部分源码

//1 头文件
#if !defined(AFX_SORTFUNCTION_H__44581B1E_90F4_4756_8080_E033C616C838__INCLUDED_)

#define AFX_SORTFUNCTION_H__44581B1E_90F4_4756_8080_E033C616C838__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000class SortFunction  {public:void QuickSort(int a[], int left, int right);void ShellSort(int a[], int n);void AscendingSortMaobao(int Array[], int n);void AscendingSort(int Array[], int n);SortFunction();virtual ~SortFunction();};#define SWAP(x, y) (x = (y + x) - (y = x))#endif // !defined(AFX_SORTFUNCTION_H__44581B1E_90F4_4756_8080_E033C616C838__INCLUDED_)//.cpp文件//. 插入升排序void SortFunction::AscendingSort(int Array[], int n){size_t start, end;start = GetTickCount();int i, j, length;int key; //从Array[]中取出要排序的数据int* pointer;length = n;pointer = Array;for(j = 1; j < length; j ++) //插入第二个元素时开始比较{i = j - 1;key = pointer[j];while(i >= 0 && pointer[i] > key) //将pointer[j] 与它前面的数依次比较,直到找到合适的位置{pointer[i + 1] = pointer[i]; //往后挪一个位置i--;}pointer[i + 1] = key;//插入}}//2. 冒泡升排序void SortFunction::AscendingSortMaobao(int Array[], int n){int *point1, temp;int i, j;point1 = Array;//此时point1已经有Array的内存区域,不需要再开辟for( i = 0; i < n - 1; i++){for( j = 0; j < n - 1 - i; j++){if( point1[j] > point1[j + 1] ){temp = point1[j];point1[j] = point1[j + 1];point1[j + 1] = temp;}}}}//3. 希尔排序void SortFunction::ShellSort(int a[], int n){int k = n / 2;//k值代表前文中的增量d值while (k >= 1)//当增量k值变化到0,结束循环{for (int i = 0; i < n; i++) //将数组分成k组, 然后对每组进行直接插入排序.{for (int j = i+k; j < n; j += k)//共进行 ? 趟插入{int m = j;while (m >= k && a[m] < a[m-k])//短路表达式{SWAP(a[m], a[m-k]);//比前一个小, 则与之交换m -= k;}}}k = k / 2;}}//4. 快速排序/*a[]要排序的数组 left数组第一个元素下标 right*//*right数组最后一个元素下标*///4.1 一趟快速排序  */int Partition(int a[], int left, int right){int i, j, key;i = left;j = right;key = a[left];do{//由后向前找到第一个比Key小的元素, 并与a[i]交换while (a[j] >= key && i < j){j--;}if (i < j) SWAP(a[i], a[j]);//由前向后找到第一个比Key大的元素, 并与a[j]交换while (a[i] <= key && i < j){i++;}if (i < j) SWAP(a[i], a[j]);} while (i < j);return j;}//4.2 快速排序void SortFunction::QuickSort(int a[], int left, int right){if (left >= right)return;if (left + 1 == right)//只有2个数,就进行交换,也是递归的最终目的{if(a[left] > a[right])SWAP(a[left], a[right]);return;}int j = Partition(a, left, right);QuickSort(a, left, j - 1);     //递归左边QuickSort(a, j + 1, right);    //递归右边}


0 0
原创粉丝点击