c语言对随机数进行快速排序,C语言自带快速排序对比插入排序
#include
#include
#include
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 个
", max);
getRandomArr(sortArr1, max); // 为待排序数组, 赋值
start = clock(); /* 开始计时 */
insertSort(sortArr1, max);
stop = clock(); /* 停止计时 */
duration1 = ((double)(stop - start)) / CLK_TCK; /* 计算运行时间 */
printf("插入排序用时: %.4f秒
", duration1);
getRandomArr(sortArr2, max); // 为待排序数组, 赋值
start = clock(); /* 开始计时 */
qsort(sortArr2, max, sizeof(int), compare);
stop = clock(); /* 停止计时 */
duration2 = ((double)(stop - start)) / CLK_TCK; /* 计算运行时间 */
printf("快速排序用时: %.4f秒
", duration2);
printf("快速排序是插入排序的 %d 倍
", (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
arr[i] = rand() % 20000 + 1; // 范围[1, 20000]
}
}
// 函数功能: 打印数组
// 参数: arr[] 需要打印的数组, n 数组大小
void printArr (int arr[], int n) {
int i;
for (i=0; i
printf("arr[%d]: %d
", i, arr[i]);
}
printf("
");
}
// 函数功能: 交换数组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
// 如果刚开始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.
c语言对随机数进行快速排序,C语言自带快速排序对比插入排序相关推荐
- c语言扔骰子随机数的相加,C语言编程学习:制作掷骰子小游戏
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- 0 1随机数C语言程序,C语言产生随机数的方法
C语言产生随机数的方法 C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.那么C语言产生随机数的方法都有哪些呢?以下仅供参考! ...
- c语言用随机数定义数组中,C语言 将发生的随机数存入数组,数据不能相同
C语言 将产生的随机数存入数组,数据不能相同 1.定义一个一维数,数组大小为24. 2.产生0~23的随机数. 3.将产生的随机数存入i数组,要求数组中的每个数据不能相同. 4.补充说明,这个子程序要 ...
- C语言排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)
参考:C语言五大排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)动态演示 作者:一只青木呀 发布时间: 2020-09-09 20:18:43 网址:https://blog.csdn.net/ ...
- c语言中有关随机数的程序,C语言中随机数相关问题
用C语言产生随机数重要用到rand函数.srand函数.及宏RAND_MAX(32767),它们均在stdlib.h中进行了声明. int rand(void);//生成一个随机数 voidsrand ...
- 【C语言】随机数函数rand和srand
文章目录 一.随机数函数 1.rand().srand() 2.time() 二.案例实现 1.案例描述 2.代码实现 一.随机数函数 1.rand().srand() C语言产生随机数要用到的函数是 ...
- 编程c语言随机函数,C语言产生随机数需要了解的几个函数
C语言产生随机数是一个常见的编程功能任务,当然这个也不难,调用两三个函数就出来了,但是你知道这些函数具体是起到怎样的作用,并且是它们是如何产生随机数的吗? 几个概念 随机数:数学上产生的都是伪随机数, ...
- 用c语言产生随机数的方法
用c语言产生随机数的方法 可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以random函数不能在gcc,vc等编译器下编译通过,那么我们如何实现呢? ra ...
- c语言产生随机数停滞,C语言产生随机数,个人理解
关于C语言产生随机数的文章网上很多 其实只需要下边三个函数即可 srand(); time( ); rand(); 需要添加头文件 #include #include 但是我自己尝试了一下,每次产生的 ...
最新文章
- 第三百三十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—深度优先与广度优先原理...
- 博士后小姐姐把“二次元老婆生成器”升级了:这一次可以指定画风
- Android 设备管理API概览(Device Administration API)
- 1-NET UX1000-实战-配置-Lync Server 2010-集成
- 查看python安装路径以及pip安装的包
- 2018 blockchain innovation final round of the chain valley
- HDU1237 简单计算器
- C#和NewSQL更配 —— CockroachDB入门
- 排序算法 —— 堆排序
- Java高并发程序设计学习笔记(十):并发调试和JDK8新特性
- 指纹识别 python实现_Python实现指纹识别你见过没?
- vsCode实现美化代码
- 自走棋突然显示服务器无法定位,刀塔自走棋服务器无法定位游戏会话_刀塔自走棋服务器无法定位游戏会话怎么回事_玩游戏网...
- 视频会议软件Zoom存在安全隐患,我们是否需要停止使用
- [京东备注插旗接口]-拼多多商家如何做好直播,直播必备小技巧
- win7系统一键还原教程
- 如何在word中输入函数
- python分析出nba球员的位置_虎扑热帖|Python数据分析|NBA的球星们喜欢在哪个位置出手...
- js 获取当前日期的前三个月
- 【机器学习】目标函数总结
热门文章
- stm32开发之使用Keil MDK以及标准外设库创建STM32工程
- 各系统安装NetFrameWork3.5 安装
- android 跳转腾讯地图导航,Android 跳转到百度、高德、腾讯地图导航
- 十进制转余三码或余三码转十进制
- 做网站不买服务器百度能搜到,做网站教程:哪几种链接是不会被百度抓取的
- mysql5.7.25安装包,Mysql5.7.25在windows下安装
- 数理逻辑学习笔记[0] 命题逻辑:语义
- CVPR2020交互式分割算法IOG的配置(Interactive Object Segmentation with Inside-Outside Guidance)
- C语言 学生成绩统计
- 树莓派4B之超声波传感器模块(python3)