排序__前期准备_生成N个互不相同的数 & 代码计时
准备全面的把一些排序算法过一遍. 在此之前的准备有:1.乱序的数组 2.对排序效率的度量 3.确定接口
一. 乱序的数组
即生成N个乱序的整数, 编程珠玑当中介绍过相应算法. 以下介绍三个算法:
1. 生成一个随机数, 接着生成下一个随机数, 若与之前的随机数都不相等则加入数组. 直到生成到数组达到足够大
2. 与以一个算法相同的想法, 不同的是在判断是否已存在时采用已存位图的形式进行判断. 初始化数组大小的位图全为0, 生成随机相应置1
3. 生成N个顺序的数组, 通过从头开始逐个与数组第随机个的数对换, 最终产生一个乱序的数组

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;//显示时间