首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

天极网 > 开发频道>数据结构学习(C++)之排序

数据结构学习(C++)之排序

2003-10-27 17:11作者:happycock出处:论坛责任编辑:方舟

天极IT资讯短信服务 电脑小技巧
资费:包月5元
手机:
介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。(首月免费)


  测试程序

  后面的例程,都是对数组的排序,使用静态链表的也适用于链表的排序。为简单起见,只对单关键码排序,并且最后的结果都是从头到尾按升序排列。下面是统一的测试程序:

#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();
SORT<int>(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溢出,另外有些递归的算法在情况比较糟的时候,记录数目太多堆栈可能会溢出,导致程序崩溃。

共5页。 1 2 3 4 5 :

关注此文的读者还看过:

返回开发频道首页

共5页。 12345下一页

软件频道最新更新

热点推荐

天极服务|关于我们|About us|网站律师|RSS订阅|友情合作|加入我们|天极动态|网站地图|意见反馈|MSN/QQ上看天极
Copyright (C) 1999-2012 Yesky.com, All Rights Reserved 版权所有 天极网络