#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语言自带快速排序对比插入排序的更多相关文章

  1. 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析之后续补充说明(有图有真相)

    如果你觉得我的有些话有点唐突,你不理解可以想看看前一篇<C++之冒泡排序.希尔排序.快速排序.插入排序.堆排序.基数排序性能对比分析>. 这几天闲着没事就写了一篇<C++之冒泡排序. ...

  2. C语言自带的快速排序(qsort)函数使用方法

    感觉打快排太慢了,找到了c语言自带的函数.这函数用起来没c++的方便,不过也够了. 函数名称:qsort,在头文件:<stdlib.h>中 不多说,上代码: #include <st ...

  3. JavaScript实现冒泡排序、快速排序、插入排序

    JavaScript实现冒泡排序.快速排序.插入排序 时间:2014-01-09 18:05:51  来源:  作者:胡晗 冒泡排序的基本思想:所谓冒泡就是泡泡一个一个往上冒,让体积最轻的泡泡浮在最上 ...

  4. python 调用dll中c或c++语言的带指针方法,

    在项目开发中遇到了,python需要去调用一个动态链接库dll中的c++方法.这个方法的参数为一个指针类型的参数,一个bool类型参数, 在python中并未对数字类型进行区分. int LP_Agc ...

  5. PHP实现快速排序、插入排序、选择排序

    1.快速排序 快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都 ...

  6. Java 常用排序算法实现--快速排序、插入排序、选择、冒泡

      public class ArrayOperation {    //二分查找算法    public static int branchSearch(int[] array, int searc ...

  7. 深入浅出数据结构C语言版(16)——插入排序

    从这一篇博文开始,我们将开始讨论排序算法.所谓排序算法,就是将给定数据根据关键字进行排序,最终实现数据依照关键字从小到大或从大到小的顺序存储.而这篇博文,就是要介绍一种简单的排序算法--插入排序(In ...

  8. js冒泡排序,快速排序,插入排序

     //冒泡排序 function sortBubble(array){   var len=array.length,i,j,tmp;   for(i=len-1;i>=1;i--){     ...

  9. js数组冒泡排序、快速排序、插入排序

    1.冒泡排序 //第一种 function bubblesort(ary){ for(var i=0;i<ary.length-1;i++){ for(var j=0;j<ary.leng ...

随机推荐

  1. shell常用的判断条件

    .判断文件夹是否存在 if [ -d /home/q/www ];then echo "true"; else echo "false" ;fi (系统内存在文 ...

  2. Linq Mysql GroupBy语句的问题处理

    语句如下: var resumeList = db.ChannelResume.Where(model); var groupValues = resumeList.GroupBy(t => n ...

  3. GraphicsMagick +im4java高并发处理大型网站图片工具-图片剪切、遮蔽、水印添加之环境搭建

    环境: centos 6.5 GraphicsMagick 下载安装 准备环镜: 需要依赖zlib图片操作函数库 下载地址:http://www.zlib.net/ 编译安装 .tar.gz cd z ...

  4. Centos6.X 安装MongoDb

    1.查看linux版本,之所以查看linux版本,是因为centos7和以前版本用的防火墙不一样,安装完mongodb后,需要关闭防火墙(或者其他方法,专业运维人员使用,我们这里为简单,直接关闭即可) ...

  5. 响应式网页设计:rem、em设置网页字体大小自适应

    「rem」是指根元素(root element,html)的字体大小,好开心的是,从遥远的 IE6 到版本帝 Chrome 他们都约好了,根元素默认的 font-size 都是 16px.这样一个新的 ...

  6. ASP.NET中常用的26个优化性能方法

    1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多 次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET 中提供了 连 ...

  7. C语言 百炼成钢27

    /* 题目63:编写C++程序完成以下功能: (1)声明一个纯虚函数类Shape(形状),其中包含来计算面积.计算周长的方法: (2)从Shape派生两个类矩形和圆形: (3)从矩形派生正方形: (4 ...

  8. Torch-RNN运行过程中的坑 [2](Lua的string sub函数,读取中文失败,乱码?)

    0.踩坑背景 仍然是torch-rnn/LanguageModel.lua文件中的一些问题,仍然是这个狗血的LM:encode_string函数: function LM:encode_string( ...

  9. js压缩 uglify

    grunt-contrib-uglify uglify是一个文件压缩插件,项目地址:https://github.com/gruntjs/grunt-contrib-uglify 本文将以一个DEMO ...

  10. reactjs中props和state最佳实践

    http://blog.csdn.net/dangnian/article/details/50998981