排序算法实现大全.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
排序算法实现大全 后面的例程,都是对数组的排序,使用静态链表的也适用于链表的排序。为简单起见,只对单关键码排序,并且最后的结果都是从头到尾按升序排列。下面是统一的测试程序: #include iostream #include iomanip using namespace std; #include stdlib.h #include time.h #include math.h #include InsertSort.h #define random(num) (rand() % (num)) #define randomize() srand((unsigned)time(NULL)) #define N 10000 //排序元素的数目 #define SORT InsertSort //排序方法 class timer//单位ms { public: void start() { start_t = clock(); } clock_t time() { return (clock() - start_t); } private: clock_t start_t; }; int KCN, RMN; timer TIMER; void test(int a[]) { TIMER.start(); SORTint(a, N, KCN, RMN); cout \tTimeSpared: TIMER.time() ms endl; cout KCN= left setw(11) KCN; cout KCN/N= left setw(11) (double)KCN/N; cout KCN/N^2= left setw(11) (double)KCN/N/N; cout KCN/NlogN= left setw(11) (double)KCN/N/log((double)N)*log(2.0) endl; cout RMN= left setw(11) RMN; cout RMN/N= left setw(11) (double)RMN/N; cout RMN/N^2= left setw(11) (double)RMN/N/N; cout RMN/NlogN= left setw(11) (double)RMN/N/log((double)N)*log(2.0) endl; } int main() { int i; //randomize();为了在相同情况下比较各个排序算法,不加这句 int* ascending = new int[N];//升序序列 int* descending = new int[N];//降序序列 int* randomness = new int[N];//随机序列 for (i = 0; i N; i++) { ascending[i] = i; randomness[i] = i; descending[i] = N - i - 1;} for (i = 0; i N; i++) swap(randomness[i], randomness[random(N)]); cout Sort ascending N= N; test(ascending); cout Sort randomness N= N; test(randomness); cout Sort descending N= N; test(descending); return 0; }   需要说明一点,KCN(关键码比较次数)、RMN(记录移动次数)并不是算法必须的,是为了对算法的性能有个直观的评价(不用那些公式算来算去)。对10000个整数排序应该是最省事的测试手段,建议不要再增多记录数目了,一是在最坏的情况不用等太久的时间,二是避免KCN、RMN溢出,另外有些递归的算法在情况比较糟的时候,记录数目太多堆栈可能会溢出,导致程序崩溃。 插入排序   基本思想是,每步将一个待排序的记录,按其关键码大小,插入到前面已经排好序的记录的适当位置,从头做到尾就可以了。   直接插入排序 template class T void InsertSort(T a[], int N, int KCN, int RMN) { KCN = 0; RMN = 0; for (int i = 1; i N; i++) { T temp = a[i]; RMN++; for (int j = i; j 0 ++KCN temp a[j - 1]; j--) { a[j] = a[j - 1]; RMN++; } a[j] = temp; RMN++; }

文档评论(0)

白领文档(原创) + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档