C语言强化——排序
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语言强化——排序的更多相关文章
- 帮初学者改代码——有多少青春可以挥霍之“c语言 多重排序”
原文:“c语言 多重排序” 原代码: #include<stdio.h> #include<string.h> struct A { char name[100]; int g ...
- go语言的排序和去重
go语言的排序: https://blog.csdn.net/u010983881/article/details/52460998 go语言去重: https://blog.csdn.net/qq_ ...
- C语言实现排序
//C语言版排序#include<stdio.h> #include<stdlib.h> //冒泡排序 void bubleSort(int data[], int n); / ...
- go语言的排序和搜索(转载)
http://studygolang.com/articles/1598 go语言的排序和搜索 晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题.排序 sort 是个基本的操作,当然搜 ...
- GO语言练习:第一个Go语言工程--排序
1.代码 2.编译 3.运行 1.代码框架 /home/fengbo/sorter $ tree . ├── bin ├── pkg ├── readme.txt └── src ├── algori ...
- C语言常用排序全解(转)
目的:重温经典排序思想,并用C语言指针实现排序算法================================================*/ /*====================== ...
- linux / centos 安装SQL Server 2017 设置默认语言与排序规则Chinese_PRC_CI_AS
安装 安装很简单参照官方教程 https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-red-hat?view=sq ...
- go语言的排序、结构体排序
原文:https://studygolang.com/articles/1598 晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题.排序 sort 是个基本的操作,当然搜索 searc ...
- [python学习] 语言基础—排序函数(sort()、sorted()、argsort()函数)
python的内建排序函数有 sort.sorted两个. 1.基础的序列升序排序直接调用sorted()方法即可 ls = list([5, 2, 3, 1, 4]) new_ls = sorted ...
随机推荐
- 《DSP using MATLAB》Problem 5.31
第3小题: 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Out ...
- linux---三剑客
linux的三剑客分别为awk/sed/grep,是运维人员必不可少的常用命令. 一:awk取列 awk ‘{print $1 “ ” $2}’ old.txt awk /aaa/ old.txt 二 ...
- Java基础三(Scanner键盘输入、Random随机数、流程控制语句)
1.引用类型变量的创建及使用2.流程控制语句之选择语句3.流程控制语句之循环语句4.循环高级 ###01创建引用类型变量公式 * A: 创建引用类型变量公式 * a: 我们要学的Scanner类是属于 ...
- react-static 基于react 渐进式静态站点生成框架
react-static 是一个不错的基于react 开发的静态站点生成框架,可以用来替代create-react-app 包含的特性 100% react 很快的构建以及性能 自动代码以及数据分离 ...
- S老师 破坏神学习
代码质量不高 就不整理了 发上来留个纪念 表示自己写过了 数据库:MySQL,服务端:PhotonServer 视频:https://pan.baidu.com/s/1i4ROaRr 客户端:http ...
- mysql为int类型的字段php取出来之后为何变为string类型?
https://segmentfault.com/q/1010000002957162 php从mysql取出int数据,变成了string https://blog.csdn.net/as17501 ...
- MySQL创建表,更新表,删除表,重命名表
创建表 mysql> create table 表名( -> 列名 数据类型 是否为空 auto_increment, -> 列名 数据类型 是否为空... -> ... -& ...
- Hi3520DV200和Hi3520DV300
处理器:V200---arm A9 600M主频V300---arm A7 800M主频 编码解码能力:V200---8路D1或者4路720PV300---8路D1或者4路1080p或者9路720p ...
- 论 大并发 下的 乐观锁定 Redis锁定 和 新时代事务
在 <企业应用架构模式> 中 提到了 乐观锁定, 用 时间戳 来 判定 交易 是否有效, 避免 传统事务 的 表锁定 造成 的 瓶颈 . 在 现在的 大并发 的 大环境下, 传统事务 及其 ...
- Linux 建立 TCP 连接的超时时间分析(解惑)
Linux 系统默认的建立 TCP 连接的超时时间为 127 秒,对于许多客户端来说,这个时间都太长了, 特别是当这个客户端实际上是一个服务的时候,更希望能够尽早失败,以便能够选择其它的可用服务重新尝 ...