C语言自带快速排序对比插入排序
#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.
C语言自带快速排序对比插入排序的更多相关文章
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析之后续补充说明(有图有真相)
如果你觉得我的有些话有点唐突,你不理解可以想看看前一篇<C++之冒泡排序.希尔排序.快速排序.插入排序.堆排序.基数排序性能对比分析>. 这几天闲着没事就写了一篇<C++之冒泡排序. ...
- C语言自带的快速排序(qsort)函数使用方法
感觉打快排太慢了,找到了c语言自带的函数.这函数用起来没c++的方便,不过也够了. 函数名称:qsort,在头文件:<stdlib.h>中 不多说,上代码: #include <st ...
- JavaScript实现冒泡排序、快速排序、插入排序
JavaScript实现冒泡排序.快速排序.插入排序 时间:2014-01-09 18:05:51 来源: 作者:胡晗 冒泡排序的基本思想:所谓冒泡就是泡泡一个一个往上冒,让体积最轻的泡泡浮在最上 ...
- python 调用dll中c或c++语言的带指针方法,
在项目开发中遇到了,python需要去调用一个动态链接库dll中的c++方法.这个方法的参数为一个指针类型的参数,一个bool类型参数, 在python中并未对数字类型进行区分. int LP_Agc ...
- PHP实现快速排序、插入排序、选择排序
1.快速排序 快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都 ...
- Java 常用排序算法实现--快速排序、插入排序、选择、冒泡
public class ArrayOperation { //二分查找算法 public static int branchSearch(int[] array, int searc ...
- 深入浅出数据结构C语言版(16)——插入排序
从这一篇博文开始,我们将开始讨论排序算法.所谓排序算法,就是将给定数据根据关键字进行排序,最终实现数据依照关键字从小到大或从大到小的顺序存储.而这篇博文,就是要介绍一种简单的排序算法--插入排序(In ...
- js冒泡排序,快速排序,插入排序
//冒泡排序 function sortBubble(array){ var len=array.length,i,j,tmp; for(i=len-1;i>=1;i--){ ...
- js数组冒泡排序、快速排序、插入排序
1.冒泡排序 //第一种 function bubblesort(ary){ for(var i=0;i<ary.length-1;i++){ for(var j=0;j<ary.leng ...
随机推荐
- Solr 多字段、打分规则、权重和实时索引同步
1.字段 Filed:<field name="_id" type="text_ik" indexed="true" stored=& ...
- linux grub 使用
linux kernel 格式之 vmlinux.zImage.bzImage.vmlinuz.uImage vmlinux 是编译出来的未经压缩的原始内核文件,是linux接受的可执行文件格 ...
- uboot中断功能实现
uboot中实现irq中断(uboot version2015.04)1.实验目的:实现GPIO_2的外部中断 2.实验步骤:a.GPIO_2(GPIO1_IO02)为中断源, 首先需要设置这个pad ...
- 下一个时代,对话即平台 —— 开始使用Bot Framework和Cognitive Service来打造你的智能对话服务
在16年3月30号微软的全球开发者大会Build上发布了Bot Framework,微软认为下一个big thing是Conversation as a Platform,简称CaaP,中文应该叫做& ...
- 02 SQL 执行
sql 被保存在 share pool 后, 开始解析, 解析包括语句的语法, 检验及对象, 以确认该用于是否有该对象的权限, 如果这些都通过了, 接下来就要看这个语句之前是否被执行过, 如果是, o ...
- DESEncrypt.cs
POJ上做做ACM的题 语言的学习基础,100个经典的算法C语言的学习要从基础开始,这里是100个经典的算法-1C语言的学习要从基础开始,这里是100个经典的算法 题目:古典问题:有一对兔子,从出生后 ...
- python 数据提取之JSON与JsonPATH
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与 ...
- java字符编码(转)
转载:http://blog.csdn.net/peach99999/article/details/7231247 深入讨论java乱码问题 几种常见的编码格式 为什么要编码 不知道大家有没有想过一 ...
- Idea定位打开文件在左边工程中的文件路径
勾选掉Autoscoll from Source
- map实现
/*PLSQL实现Map*/ --建立序列create sequence seq_map_param_id ;--建立参数表create table map_param(id number prima ...