#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
#define MAX_NUM 60000
//求数组长度的模板函数
template<typename T>
int getArryLen(T& arr) {
return (sizeof(arr) / sizeof(arr[0]));
}
//交换两个数
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
//冒泡排序
void bubbleSort(int arr[],int len) {
for (int i = 0; i < len; i++) {
for (int j = i+1; j < len; j++) {
if (arr[i] > arr[j]) {
swap(arr[i], arr[j]);
}
}
}
}
//选择排序:选择排序只是减少了交换的次数
void selectSort(int arr[], int len) {
int min;
for (int i = 0; i < len; i++) {
min = i;
for (int j = i + 1; j < len; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
if (min != i) {
swap(arr[i], arr[min]);
}
}
}
//打印数组
void printArray(int arr[],int len) {
for (int i = 0; i < len; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
int main() {
//生成数组
int numArry[MAX_NUM];
srand((unsigned)time(NULL));//设置随机数源
for (int i = 0; i < MAX_NUM; i++) {
numArry[i] = rand() % MAX_NUM;
}
//获得数组长度
int length = getArryLen(numArry);
//排序前打印
cout << "排序前打印:" << endl;
time_t startSecondTime, endSecendTime;
clock_t cstartMilliSecondTime, cendMilliSecondTime;
startSecondTime = time(NULL);//获取当前系统时间
cstartMilliSecondTime = clock();//clock_t也是一个长整型,表示的是从程序开始运行到执行clock函数时所经过的cpu时钟计时单元数
//printArray(numArry, length);
//排序
bubbleSort(numArry, length);
endSecendTime = time(NULL);//获取当前系统时间
//计算排序秒数差
double interval=difftime(endSecendTime, startSecondTime);//使用time.h中的double difftime( time_t time2, time_t time1 );功能:函数返回时间参数time2和time1之差的秒数表示。
cendMilliSecondTime = clock();
//排序后打印
cout << "排序后打印:" << endl;
//printArray(numArry, length);
cout << "排序前后相差秒数:" << interval << endl;
cout << "排序前后相差毫秒数:" << cendMilliSecondTime - cstartMilliSecondTime << endl;
system("pause");
return 0;
}
有关时间间隔的计算:
可以通过difftime来计算两个时间的间隔,精确到秒,函数原型:
double difftime(time_t time2, time_t time1)
要想精确到毫秒,就要使用clock函数了,函数原型:
clock_t clock(void)
从定义可以看出clock返回一个clock_t类型,这个类型也定义在time.h中,原型是:
typedef long clock_t
clock_t也是一个长整型,表示的是从程序开始运行到执行clock函数时所经过的cpu时钟计时单元数。