排序__前期准备_生成N个互不相同的数 & 代码计时

准备全面的把一些排序算法过一遍. 在此之前的准备有:1.乱序的数组 2.对排序效率的度量 3.确定接口

 

一. 乱序的数组

  即生成N个乱序的整数, 编程珠玑当中介绍过相应算法. 以下介绍三个算法:

  1. 生成一个随机数, 接着生成下一个随机数, 若与之前的随机数都不相等则加入数组. 直到生成到数组达到足够大

  2. 与以一个算法相同的想法, 不同的是在判断是否已存在时采用已存位图的形式进行判断. 初始化数组大小的位图全为0, 生成随机相应置1

  3. 生成N个顺序的数组, 通过从头开始逐个与数组第随机个的数对换, 最终产生一个乱序的数组

算法3 生成乱序数组
 1 int* get_random_numbers(int min, int max)
 2 {
 3     if (max<=min)
 4     {
 5         return 0;
 6     }
 7 
 8     int n = max - min;
 9     int* numbers;
10     numbers = (int*)malloc(n*sizeof(int));
11     for (int i=0; i<n; i++)
12     {
13         numbers[i] = min+i;
14     }
15 
16     //随机数种子
17     srand((unsigned)time(NULL));
18 
19     //产生随机数序列
20     for (int i=0; i<n; i++)
21     {
22         int temp;
23         int c = rand()%n;
24         //对换
25         temp = numbers[i];
26         numbers[i] = numbers[c];
27         numbers[c] = temp;
28     }
29     return numbers;
30 }

 

 

二.代码计时

  clock函数精确到毫秒, 单位毫秒. 在使用前需 #include <time.h>

1     clock_t start = clock();//计时开始
2     num = insert_sort(num, 20);
3     clock_t end = clock();//计时结束
4     std::cout<<end-start<<std::endl;//显示时间
posted @ 2012-07-07 23:35  樹下  阅读(175)  评论(0)    收藏  举报