// Now, lets see how long it takes to use these implementations int main(int argc, char** argv) { struct cstruct cs; // chars struct sstruct ss; // shorts struct lstruct ls; // longs struct btype b; // bits char csa[32]; short ssa[32]; long lsa[32]; long count; long i; // For timing, we can vary the number of iterations run Assert(argc == 2, "Usage: flags <number_of_iterations>"); count = atol(argv[1]); cs.pos[0] = true; ss.pos[0] = true; ls.pos[0] = true; csa[0] = true; ssa[0] = true; lsa[0] = true; b.f0 = true; // For each interation, we are going to test the time to read and write // the values by doing a copy from one array position to another. // To cut down on the overhead of the outer loop, we do 120 assignements // within the loop body. Settime(); for (i=0; i<count; i++) { csa[1] = csa[0]; csa[2] = csa[1]; csa[3] = csa[2]; csa[4] = csa[3]; csa[5] = csa[4]; csa[6] = csa[5]; csa[7] = csa[6]; csa[8] = csa[7]; csa[9] = csa[8]; csa[10] = csa[9]; csa[11] = csa[10]; csa[12] = csa[11]; csa[13] = csa[12]; csa[14] = csa[13]; csa[15] = csa[14]; csa[16] = csa[15]; csa[17] = csa[16]; csa[18] = csa[17]; csa[19] = csa[18]; csa[20] = csa[19]; csa[21] = csa[20]; csa[22] = csa[21]; csa[23] = csa[22]; csa[24] = csa[23]; csa[25] = csa[24]; csa[26] = csa[25]; csa[27] = csa[26]; csa[28] = csa[27]; csa[29] = csa[28]; csa[30] = csa[29]; csa[1] = csa[0]; csa[2] = csa[1]; csa[3] = csa[2]; csa[4] = csa[3]; csa[5] = csa[4]; csa[6] = csa[5]; csa[7] = csa[6]; csa[8] = csa[7]; csa[9] = csa[8]; csa[10] = csa[9]; csa[11] = csa[10]; csa[12] = csa[11]; csa[13] = csa[12]; csa[14] = csa[13]; csa[15] = csa[14]; csa[16] = csa[15]; csa[17] = csa[16]; csa[18] = csa[17]; csa[19] = csa[18]; csa[20] = csa[19]; csa[21] = csa[20]; csa[22] = csa[21]; csa[23] = csa[22]; csa[24] = csa[23]; csa[25] = csa[24]; csa[26] = csa[25]; csa[27] = csa[26]; csa[28] = csa[27]; csa[29] = csa[28]; csa[30] = csa[29]; csa[1] = csa[0]; csa[2] = csa[1]; csa[3] = csa[2]; csa[4] = csa[3]; csa[5] = csa[4]; csa[6] = csa[5]; csa[7] = csa[6]; csa[8] = csa[7]; csa[9] = csa[8]; csa[10] = csa[9]; csa[11] = csa[10]; csa[12] = csa[11]; csa[13] = csa[12]; csa[14] = csa[13]; csa[15] = csa[14]; csa[16] = csa[15]; csa[17] = csa[16]; csa[18] = csa[17]; csa[19] = csa[18]; csa[20] = csa[19]; csa[21] = csa[20]; csa[22] = csa[21]; csa[23] = csa[22]; csa[24] = csa[23]; csa[25] = csa[24]; csa[26] = csa[25]; csa[27] = csa[26]; csa[28] = csa[27]; csa[29] = csa[28]; csa[30] = csa[29]; csa[1] = csa[0]; csa[2] = csa[1]; csa[3] = csa[2]; csa[4] = csa[3]; csa[5] = csa[4]; csa[6] = csa[5]; csa[7] = csa[6]; csa[8] = csa[7]; csa[9] = csa[8]; csa[10] = csa[9]; csa[11] = csa[10]; csa[12] = csa[11]; csa[13] = csa[12]; csa[14] = csa[13]; csa[15] = csa[14]; csa[16] = csa[15]; csa[17] = csa[16]; csa[18] = csa[17]; csa[19] = csa[18]; csa[20] = csa[19]; csa[21] = csa[20]; csa[22] = csa[21]; csa[23] = csa[22]; csa[24] = csa[23]; csa[25] = csa[24]; csa[26] = csa[25]; csa[27] = csa[26]; csa[28] = csa[27]; csa[29] = csa[28]; csa[30] = csa[29]; } cout << "Time for characters (120 assigns): " << count << " iterations: " << Gettime() << " seconds\n"; Settime(); for (i=0; i<count; i++) { ssa[1] = ssa[0]; ssa[2] = ssa[1]; ssa[3] = ssa[2]; ssa[4] = ssa[3]; ssa[5] = ssa[4]; ssa[6] = ssa[5]; ssa[7] = ssa[6]; ssa[8] = ssa[7]; ssa[9] = ssa[8]; ssa[10] = ssa[9]; ssa[11] = ssa[10]; ssa[12] = ssa[11]; ssa[13] = ssa[12]; ssa[14] = ssa[13]; ssa[15] = ssa[14]; ssa[16] = ssa[15]; ssa[17] = ssa[16]; ssa[18] = ssa[17]; ssa[19] = ssa[18]; ssa[20] = ssa[19]; ssa[21] = ssa[20]; ssa[22] = ssa[21]; ssa[23] = ssa[22]; ssa[24] = ssa[23]; ssa[25] = ssa[24]; ssa[26] = ssa[25]; ssa[27] = ssa[26]; ssa[28] = ssa[27]; ssa[29] = ssa[28]; ssa[30] = ssa[29]; ssa[1] = ssa[0]; ssa[2] = ssa[1]; ssa[3] = ssa[2]; ssa[4] = ssa[3]; ssa[5] = ssa[4]; ssa[6] = ssa[5]; ssa[7] = ssa[6]; ssa[8] = ssa[7]; ssa[9] = ssa[8]; ssa[10] = ssa[9]; ssa[11] = ssa[10]; ssa[12] = ssa[11]; ssa[13] = ssa[12]; ssa[14] = ssa[13]; ssa[15] = ssa[14]; ssa[16] = ssa[15]; ssa[17] = ssa[16]; ssa[18] = ssa[17]; ssa[19] = ssa[18]; ssa[20] = ssa[19]; ssa[21] = ssa[20]; ssa[22] = ssa[21]; ssa[23] = ssa[22]; ssa[24] = ssa[23]; ssa[25] = ssa[24]; ssa[26] = ssa[25]; ssa[27] = ssa[26]; ssa[28] = ssa[27]; ssa[29] = ssa[28]; ssa[30] = ssa[29]; ssa[1] = ssa[0]; ssa[2] = ssa[1]; ssa[3] = ssa[2]; ssa[4] = ssa[3]; ssa[5] = ssa[4]; ssa[6] = ssa[5]; ssa[7] = ssa[6]; ssa[8] = ssa[7]; ssa[9] = ssa[8]; ssa[10] = ssa[9]; ssa[11] = ssa[10]; ssa[12] = ssa[11]; ssa[13] = ssa[12]; ssa[14] = ssa[13]; ssa[15] = ssa[14]; ssa[16] = ssa[15]; ssa[17] = ssa[16]; ssa[18] = ssa[17]; ssa[19] = ssa[18]; ssa[20] = ssa[19]; ssa[21] = ssa[20]; ssa[22] = ssa[21]; ssa[23] = ssa[22]; ssa[24] = ssa[23]; ssa[25] = ssa[24]; ssa[26] = ssa[25]; ssa[27] = ssa[26]; ssa[28] = ssa[27]; ssa[29] = ssa[28]; ssa[30] = ssa[29]; ssa[1] = ssa[0]; ssa[2] = ssa[1]; ssa[3] = ssa[2]; ssa[4] = ssa[3]; ssa[5] = ssa[4]; ssa[6] = ssa[5]; ssa[7] = ssa[6]; ssa[8] = ssa[7]; ssa[9] = ssa[8]; ssa[10] = ssa[9]; ssa[11] = ssa[10]; ssa[12] = ssa[11]; ssa[13] = ssa[12]; ssa[14] = ssa[13]; ssa[15] = ssa[14]; ssa[16] = ssa[15]; ssa[17] = ssa[16]; ssa[18] = ssa[17]; ssa[19] = ssa[18]; ssa[20] = ssa[19]; ssa[21] = ssa[20]; ssa[22] = ssa[21]; ssa[23] = ssa[22]; ssa[24] = ssa[23]; ssa[25] = ssa[24]; ssa[26] = ssa[25]; ssa[27] = ssa[26]; ssa[28] = ssa[27]; ssa[29] = ssa[28]; ssa[30] = ssa[29]; } cout << "Time for shorts (120 assigns): " << count << " iterations: " << Gettime() << " seconds\n"; Settime(); for (i=0; i<count; i++) { lsa[1] = lsa[0]; lsa[2] = lsa[1]; lsa[3] = lsa[2]; lsa[4] = lsa[3]; lsa[5] = lsa[4]; lsa[6] = lsa[5]; lsa[7] = lsa[6]; lsa[8] = lsa[7]; lsa[9] = lsa[8]; lsa[10] = lsa[9]; lsa[11] = lsa[10]; lsa[12] = lsa[11]; lsa[13] = lsa[12]; lsa[14] = lsa[13]; lsa[15] = lsa[14]; lsa[16] = lsa[15]; lsa[17] = lsa[16]; lsa[18] = lsa[17]; lsa[19] = lsa[18]; lsa[20] = lsa[19]; lsa[21] = lsa[20]; lsa[22] = lsa[21]; lsa[23] = lsa[22]; lsa[24] = lsa[23]; lsa[25] = lsa[24]; lsa[26] = lsa[25]; lsa[27] = lsa[26]; lsa[28] = lsa[27]; lsa[29] = lsa[28]; lsa[30] = lsa[29]; lsa[1] = lsa[0]; lsa[2] = lsa[1]; lsa[3] = lsa[2]; lsa[4] = lsa[3]; lsa[5] = lsa[4]; lsa[6] = lsa[5]; lsa[7] = lsa[6]; lsa[8] = lsa[7]; lsa[9] = lsa[8]; lsa[10] = lsa[9]; lsa[11] = lsa[10]; lsa[12] = lsa[11]; lsa[13] = lsa[12]; lsa[14] = lsa[13]; lsa[15] = lsa[14]; lsa[16] = lsa[15]; lsa[17] = lsa[16]; lsa[18] = lsa[17]; lsa[19] = lsa[18]; lsa[20] = lsa[19]; lsa[21] = lsa[20]; lsa[22] = lsa[21]; lsa[23] = lsa[22]; lsa[24] = lsa[23]; lsa[25] = lsa[24]; lsa[26] = lsa[25]; lsa[27] = lsa[26]; lsa[28] = lsa[27]; lsa[29] = lsa[28]; lsa[30] = lsa[29]; lsa[1] = lsa[0]; lsa[2] = lsa[1]; lsa[3] = lsa[2]; lsa[4] = lsa[3]; lsa[5] = lsa[4]; lsa[6] = lsa[5]; lsa[7] = lsa[6]; lsa[8] = lsa[7]; lsa[9] = lsa[8]; lsa[10] = lsa[9]; lsa[11] = lsa[10]; lsa[12] = lsa[11]; lsa[13] = lsa[12]; lsa[14] = lsa[13]; lsa[15] = lsa[14]; lsa[16] = lsa[15]; lsa[17] = lsa[16]; lsa[18] = lsa[17]; lsa[19] = lsa[18]; lsa[20] = lsa[19]; lsa[21] = lsa[20]; lsa[22] = lsa[21]; lsa[23] = lsa[22]; lsa[24] = lsa[23]; lsa[25] = lsa[24]; lsa[26] = lsa[25]; lsa[27] = lsa[26]; lsa[28] = lsa[27]; lsa[29] = lsa[28]; lsa[30] = lsa[29]; lsa[1] = lsa[0]; lsa[2] = lsa[1]; lsa[3] = lsa[2]; lsa[4] = lsa[3]; lsa[5] = lsa[4]; lsa[6] = lsa[5]; lsa[7] = lsa[6]; lsa[8] = lsa[7]; lsa[9] = lsa[8]; lsa[10] = lsa[9]; lsa[11] = lsa[10]; lsa[12] = lsa[11]; lsa[13] = lsa[12]; lsa[14] = lsa[13]; lsa[15] = lsa[14]; lsa[16] = lsa[15]; lsa[17] = lsa[16]; lsa[18] = lsa[17]; lsa[19] = lsa[18]; lsa[20] = lsa[19]; lsa[21] = lsa[20]; lsa[22] = lsa[21]; lsa[23] = lsa[22]; lsa[24] = lsa[23]; lsa[25] = lsa[24]; lsa[26] = lsa[25]; lsa[27] = lsa[26]; lsa[28] = lsa[27]; lsa[29] = lsa[28]; lsa[30] = lsa[29]; } cout << "Time for longs (120 assigns): " << count << " iterations: " << Gettime() << " seconds\n"; Settime(); for (i=0; i<count; i++) { b.f1 = b.f0; b.f2 = b.f1; b.f3 = b.f2; b.f4 = b.f3; b.f5 = b.f4; b.f6 = b.f5; b.f7 = b.f6; b.f8 = b.f7; b.f9 = b.f8; b.f10 = b.f9; b.f11 = b.f10; b.f12 = b.f11; b.f13 = b.f12; b.f14 = b.f13; b.f15 = b.f14; b.f16 = b.f15; b.f17 = b.f16; b.f18 = b.f17; b.f19 = b.f18; b.f20 = b.f19; b.f21 = b.f20; b.f22 = b.f21; b.f23 = b.f22; b.f24 = b.f23; b.f25 = b.f24; b.f26 = b.f25; b.f27 = b.f26; b.f28 = b.f27; b.f29 = b.f28; b.f30 = b.f29; b.f1 = b.f0; b.f2 = b.f1; b.f3 = b.f2; b.f4 = b.f3; b.f5 = b.f4; b.f6 = b.f5; b.f7 = b.f6; b.f8 = b.f7; b.f9 = b.f8; b.f10 = b.f9; b.f11 = b.f10; b.f12 = b.f11; b.f13 = b.f12; b.f14 = b.f13; b.f15 = b.f14; b.f16 = b.f15; b.f17 = b.f16; b.f18 = b.f17; b.f19 = b.f18; b.f20 = b.f19; b.f21 = b.f20; b.f22 = b.f21; b.f23 = b.f22; b.f24 = b.f23; b.f25 = b.f24; b.f26 = b.f25; b.f27 = b.f26; b.f28 = b.f27; b.f29 = b.f28; b.f30 = b.f29; b.f1 = b.f0; b.f2 = b.f1; b.f3 = b.f2; b.f4 = b.f3; b.f5 = b.f4; b.f6 = b.f5; b.f7 = b.f6; b.f8 = b.f7; b.f9 = b.f8; b.f10 = b.f9; b.f11 = b.f10; b.f12 = b.f11; b.f13 = b.f12; b.f14 = b.f13; b.f15 = b.f14; b.f16 = b.f15; b.f17 = b.f16; b.f18 = b.f17; b.f19 = b.f18; b.f20 = b.f19; b.f21 = b.f20; b.f22 = b.f21; b.f23 = b.f22; b.f24 = b.f23; b.f25 = b.f24; b.f26 = b.f25; b.f27 = b.f26; b.f28 = b.f27; b.f29 = b.f28; b.f30 = b.f29; b.f1 = b.f0; b.f2 = b.f1; b.f3 = b.f2; b.f4 = b.f3; b.f5 = b.f4; b.f6 = b.f5; b.f7 = b.f6; b.f8 = b.f7; b.f9 = b.f8; b.f10 = b.f9; b.f11 = b.f10; b.f12 = b.f11; b.f13 = b.f12; b.f14 = b.f13; b.f15 = b.f14; b.f16 = b.f15; b.f17 = b.f16; b.f18 = b.f17; b.f19 = b.f18; b.f20 = b.f19; b.f21 = b.f20; b.f22 = b.f21; b.f23 = b.f22; b.f24 = b.f23; b.f25 = b.f24; b.f26 = b.f25; b.f27 = b.f26; b.f28 = b.f27; b.f29 = b.f28; b.f30 = b.f29; } cout << "Time for bitfields (120 assigns): " << count << " iterations: " << Gettime() << " seconds\n"; return 0; }
void main() { /* int listsize = 9; Node *Array = new Node[9]; Array[0].key = 97; Array[1].key = 53; Array[2].key = 88; Array[3].key = 59; Array[4].key = 26; Array[5].key = 41; Array[6].key = 88; Array[7].key = 31; Array[8].key = 22; cout << "排序前:" << endl; Print<Node>(Array, listsize); RadixSort<Node>(Array, listsize, DStep, radix); cout << "排序后:" << endl; Print<Node>(Array, listsize); */ int input = -1; // 排序类型: -1 --不增(逆序) ; +1 - 不降(正序); 0 -- 随机 Randomize(); int listsize = 1000; Node *Array = new Node[ARRAYSIZE]; /* // 也可以采用下列命令行的形式 // <sortname> [+/-] <size_of_test> <threshold> // -1 --不增 ; +1 - 不降; 无参数 -- 0 随机 // <size_of_test> 测试数据规模 // <threshold> 快速排序、归并排序等某些需要阈值的排序 int currarg; if ((argc < 2) || (argc > 4)) { cout << "Usage: <sortname> [+/-] <size> [<threshold>]\n"; exit(-1); } currarg = 1; if (argv[currarg][0] == '-') { input = -1; currarg++; } else if (argv[currarg][0] == '+') { input = 1; currarg++; } listsize = atoi(argv[currarg++]); if (argc > currarg) THRESHOLD = atoi(argv[currarg]); if ((listsize > ARRAYSIZE) || (listsize < 0)) { cout << "Selected list size is too big\n"; exit(-1); } cout << "Input: " << input << ", size: " << listsize << ", threshold: " << THRESHOLD << "\n"; */ int i, j; int k = ARRAYSIZE / listsize; if (input == -1) { for (i=0; i<k; i++) // 逆序 for (j=0; j<listsize; j++) Array[i*listsize + j].key = listsize - j; } else if (input == 0) for (i=0; i<ARRAYSIZE; i++) Array[i].key = Random(32003); // 随机 // Array[i].key = Random(1000000); // <1M的20位整数,随机 else { // 正序 for (i=0; i<k; i++) for (j=0; j<listsize; j++) Array[i*listsize + j].key = j; } Settime(); for (i=0; i<ARRAYSIZE; i+=listsize) { // cout << "排序前:" << endl; // PrintArray<Node>(&Array[i], i); RadixSort<Node>(&Array[i], listsize, DStep, radix); // cout << "排序后:" << endl; // PrintAddr<Node>(&Array[i], listsize); } cout << "Sort with list size " << listsize << ", Array size " << ARRAYSIZE << " : " << Gettime()/k << " seconds\n"; }