#include <stdio.h>
#include <stdlib.h>
#include <time.h> void getRandomArr (int arr[], int n);
void printArr (int arr[], int n);
void swap (int arr[], int i, int j);
void insertSort (int arr[], int n);
int compare(const int *a, const int *b); int main () {
int max = 40000; // 数组长度
int sortArr1[max]; // 待排序数组
int sortArr2[max]; // 待排序数组
clock_t start, stop;
double duration1;
double duration2; printf("待排数据共 %d 个\n", max); getRandomArr(sortArr1, max); // 为待排序数组, 赋值
start = clock(); /* 开始计时 */
insertSort(sortArr1, max);
stop = clock(); /* 停止计时 */
duration1 = ((double)(stop - start)) / CLK_TCK; /* 计算运行时间 */
printf("插入排序用时: %.4f秒\n", duration1); getRandomArr(sortArr2, max); // 为待排序数组, 赋值
start = clock(); /* 开始计时 */
qsort(sortArr2, max, sizeof(int), compare);
stop = clock(); /* 停止计时 */
duration2 = ((double)(stop - start)) / CLK_TCK; /* 计算运行时间 */
printf("快速排序用时: %.4f秒\n", duration2); printf("快速排序是插入排序的 %d 倍\n", (int)(duration1 / duration2)); return 0;
} // 函数功能: 对主程序中的数组进行, 随机数赋值
// 参数: arr[] 主程序数组名称, n 数组大小
void getRandomArr (int arr[], int n) {
int i;
arr[0] = 0; // 默认0号下标, 值为0
srand(time(0)); // 随机数种子
for (i=1; i<n; i++) {
arr[i] = rand() % 20000 + 1; // 范围[1, 20000]
}
} // 函数功能: 打印数组
// 参数: arr[] 需要打印的数组, n 数组大小
void printArr (int arr[], int n) {
int i;
for (i=0; i<n; i++) {
printf("arr[%d]: %d\n", i, arr[i]);
}
printf("\n");
} // 函数功能: 交换数组i和j下标的2个元素
void swap (int arr[], int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
} // 函数功能: 完成对arr[]的排序
// 参数: arr[] 待排序的数组, n该数组的长度
void insertSort (int arr[], int n) {
int i;
int j;
for (i=2; i<n; i++) {
// 如果刚开始i > i-1, 则该元素就是本次最大值, 不用移动
if (arr[i] > arr[i-1]) {
continue;
} for (j=i-1; j>=1; j--) { // 遍历已经排好序的元素
// 进行两两比较, 并交换
if (arr[j+1] < arr[j]) {
swap(arr, j, j+1);
}
}
// printArr(arr, n);
}
} /*
返回值: >0, 说明arg1 > arg2, 也就是arg1在arg2右边,
从小到大排序
*/
int compare(const int *a, const int *b) {
int res;
int arg1 = *a;
int arg2 = *b; if (arg1 < arg2) {
res = -1;
} else if (arg1 > arg2) {
res = 1;
} else {
res = 0;
}
return res;
}

运行结果:

待排数据共 40000 个
插入排序用时: 3.8570秒
快速排序用时: 0.0080秒
快速排序是插入排序的 482 倍 Process returned 0 (0x0) execution time : 3.983 s
Press any key to continue.

最新文章

  1. 去掉tableview顶部留白
  2. java向Excel文件写入数据
  3. ACM 字符串替换
  4. POJ 3687 Labeling Balls()
  5. 【web】 亿级Web系统搭建——单机到分布式集群
  6. Objective-C 高级编程:iOS与OS X多线程和内存管理
  7. 转:PHP – Best Practises
  8. 【单调队列】Vijos P1771 瑞士轮 (NOIP2011普及组第三题)
  9. Codeforces 526E Transmitting Levels
  10. (原)使用mkl计算特征值和特征向量
  11. ckplayer 项目实际应用代码整理,支持标清,高清,超清切换!
  12. CentOS查看端口是否被占用
  13. 每日回顾Shell —cat,tail,head
  14. 安装RabbitMQ(一)
  15. Firefox 的兼容问题
  16. javascript 一些特殊的写法
  17. CSS水平居中的三种方法
  18. python-lambda用法
  19. bbs项目中的零碎点记录
  20. 11.sklearn.preprocessing.LabelEncoder的作用

热门文章

  1. redis存储对象与对象序列化详解
  2. 列出自己常用的jdk中的数据结构
  3. 【BZOJ】1596: [Usaco2008 Jan]电话网络(树形dp+特殊的技巧)
  4. ubuntu14.04安装vmware workstation
  5. Unity3D必备知识: 物理学公式
  6. numpy和TensorFlow的函数
  7. CFontDialog学习
  8. IOS-添加分段控件SegmentControl
  9. iOS-将NSString转换成UTF8编码的NSString
  10. iOS-tableView本地动画刷新