1、完成堆排,对比堆排和qsort在排序1亿数的时间差异

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define N 100000000
#define SWAP(a,b) {int tmp=a; a=b; b=tmp;} //单次调整
void adjustMaxHeap(int *arr, int adjustPos, int arrlen) {
int parent = adjustPos;
int child = 2 * parent + 1;
while (child < arrlen) {
if (child + 1 < arrlen && arr[child + 1] > arr[child]) {
child++;
}
if (arr[child] > arr[parent]) {
SWAP(arr[parent], arr[child]);
parent = child;
child = parent * 2 + 1;
}
else {
break;
}
}
} void HeapSort(int *arr) {
int i;
for (int i = N / 2 - 1;i >= 0;i--) {
adjustMaxHeap(arr, i, N);
}
SWAP(arr[0], arr[N - 1]);
for (int i = N - 1;i > 1;i--) {
adjustMaxHeap(arr, 0, i);
SWAP(arr[0], arr[i - 1]);
}
} void printArray(int *a) {
for (int i = 0;i < N;i++) {
printf("%3d ", a[i]);
}
printf("\n");
} void compare(const void * a, const void * b) {
int *p1 = (int*)a;
int *p2 = (int*)b;
return *p1 - *p2;
} int main() {
int i;
time_t start, end;
int *a = (int*)calloc(N, sizeof(int));
srand(time(NULL));
for (i = 0;i < N;++i) {
a[i] = rand() % 100;
}
//printArray(a, N);
start = time(NULL);
//HeapSort(a);
qsort(a, N, sizeof(int), compare);
end = time(NULL);
//printArray(a);
printf("use time = %d\n", end - start);
return 0;
}

堆排时间:

qsort()时间:

2、完成计数排序,对比计数排序和堆排在排序1亿数的时间差异

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define N 100000000
#define SWAP(a,b) {int tmp=a; a=b; b=tmp;}
#define R 100 //单次调整
void adjustMaxHeap(int *arr, int adjustPos, int arrlen) {
int parent = adjustPos;
int child = 2 * parent + 1;
while (child < arrlen) {
if (child + 1 < arrlen && arr[child + 1] > arr[child]) {
child++;
}
if (arr[child] > arr[parent]) {
SWAP(arr[parent], arr[child]);
parent = child;
child = parent * 2 + 1;
}
else {
break;
}
}
} void HeapSort(int *arr) {
int i;
for (int i = N / 2 - 1;i >= 0;i--) {
adjustMaxHeap(arr, i, N);
}
SWAP(arr[0], arr[N - 1]);
for (int i = N - 1;i > 1;i--) {
adjustMaxHeap(arr, 0, i);
SWAP(arr[0], arr[i - 1]);
}
} void printArray(int *a) {
for (int i = 0;i < N;i++) {
printf("%3d ", a[i]);
}
printf("\n");
} void compare(const void * a, const void * b) {
int *p1 = (int*)a;
int *p2 = (int*)b;
return *p1 - *p2;
} void CountSort(int *arr) {
int *count = (int*)calloc(R, sizeof(int));
int i, j, k;
for (i = 0;i < N;i++) {
count[arr[i]]++;
}
k = 0;
for (i = 0;i < R;i++) {
for (j = 0;j < count[i];j++) {
arr[k] = i;
k++;
}
}
} int main() {
int i;
time_t start, end;
int *a = (int*)calloc(N, sizeof(int));
srand(time(NULL));
for (i = 0;i < N;++i) {
a[i] = rand() % 100;
}
//printArray(a, N);
start = time(NULL);
//HeapSort(a);
//qsort(a, N, sizeof(int), compare);
CountSort(a);
end = time(NULL);
//printArray(a);
printf("use time = %d\n", end - start);
return 0;
}

计数排序:

堆排:

C语言强化——排序的更多相关文章

  1. 帮初学者改代码——有多少青春可以挥霍之“c语言 多重排序”

    原文:“c语言 多重排序” 原代码: #include<stdio.h> #include<string.h> struct A { char name[100]; int g ...

  2. go语言的排序和去重

    go语言的排序: https://blog.csdn.net/u010983881/article/details/52460998 go语言去重: https://blog.csdn.net/qq_ ...

  3. C语言实现排序

    //C语言版排序#include<stdio.h> #include<stdlib.h> //冒泡排序 void bubleSort(int data[], int n); / ...

  4. go语言的排序和搜索(转载)

    http://studygolang.com/articles/1598 go语言的排序和搜索 晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题.排序 sort 是个基本的操作,当然搜 ...

  5. GO语言练习:第一个Go语言工程--排序

    1.代码 2.编译 3.运行 1.代码框架 /home/fengbo/sorter $ tree . ├── bin ├── pkg ├── readme.txt └── src ├── algori ...

  6. C语言常用排序全解(转)

    目的:重温经典排序思想,并用C语言指针实现排序算法================================================*/ /*====================== ...

  7. linux / centos 安装SQL Server 2017 设置默认语言与排序规则Chinese_PRC_CI_AS

    安装 安装很简单参照官方教程 https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-red-hat?view=sq ...

  8. go语言的排序、结构体排序

    原文:https://studygolang.com/articles/1598 晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题.排序 sort 是个基本的操作,当然搜索 searc ...

  9. [python学习] 语言基础—排序函数(sort()、sorted()、argsort()函数)

    python的内建排序函数有 sort.sorted两个. 1.基础的序列升序排序直接调用sorted()方法即可 ls = list([5, 2, 3, 1, 4]) new_ls = sorted ...

随机推荐

  1. oracle审计的激活与取消

    审计audit用户见识用户所执行的操作,并且oracle会将审计跟踪结果存放到os文件或数据库中 激活审计 conn /as sysdba show parameter audit_sys_opera ...

  2. python基础(八)——多线程

    [root@bogon python]# cat test.py #!/usr/bin/ptyhon import thread import time def print_time(threadNa ...

  3. MySQL--查看数据库连接信息

    ===================================== 查看当前连接到数据库的用户和Host ## 查看当前连接到数据库的用户和Host ## SELECT DISTINCT US ...

  4. S老师 Shader 学习

    Mesh Filter : 存储一个Mesh(网格,模型的网格,就是模型的由哪些三角面组成,组成一个什么样子的模型,三角面的一些顶点信息) Mesh Renderer:用来渲染一个模型的外观,就是样子 ...

  5. 我发起了一个 用 物理服务器 和 .Net 平台 构建云平台 的 .Net 开源项目

    大家好 , 我发起了一个 用 物理服务器 和 .Net 平台 构建云平台 的 .Net 开源项目 . 对 , 用 物理服务器 和 .Net 平台 构建 云平台 . 通过 .Net 构建 分布式 计算集 ...

  6. 并发运算lib

    最近对类似于erlang或者golang的并发运算很感兴趣.以下是看到的相关资料. libgo c++,技术:协程,多线程.这是俺发现的用法最漂亮的c++库,用法参考golang CAF 全称c++ ...

  7. create-react-app 搭建的项目中,引入 webpack-bundle-analyzer 打包分析

    安装npm intall webpack-bundle-analyzer --save-dev 在 config/webpack.config.prod.js 文件(推荐)或 config/webpa ...

  8. windows下安装python-Levenshtein

    安装python-Levenshtein 报错 error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Vi ...

  9. Typescript学习总结之模块

    面向对象的特性 模块 模块可以帮助开发者将代码分割为可重用的单元.开发者可以自己决定将模块中的哪些资源(类.方法.变量) 暴露给外部使用,哪些资源只在模块内使用. 如下图, 创建了a.ts 和b.ts ...

  10. Centos7上HBase的安装和配置

    注意事项 HBase配置必须使用主机名,不支持直接配置IP地址.我尝试过,如果不使用主机名直接用IP,会导致HBase连接zk超时. > 设置主机名 hostnamectl set-hostna ...