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 ...
随机推荐
- golang 内存占用测量
web服务中加入如下 import ( "runtime" "time" "fmt" ) go func() { for { var m r ...
- linux之shell终端使用操作快捷键
所谓的shell终端就是桌面右键里面的打开终端那个终端 敲命令是一件很有趣的事,可是有时候我们会遇到一些很麻烦的事 例如,命令太长导致敲完后一大串字符可读性低,想把vi filename 快速改为ca ...
- day39 css
一.css的引入方式 在HTML中引入css方式总共有三种: 行内样式 内接样式 外接样式 3.1 链接式 3.1 导入式 css介绍 现在的互联网前端分三层: HTML:超文本标记语言.从语义的角度 ...
- day 32 管道 事件 信号量 进程池
一.管道(多个时数据不安全) Pipe 类 (像队列一样,数据只能取走一次) conn1,conn2 = Pipe() 建立管道 .send() 发送 .recv() 接收 二.事 ...
- [转]logback常用配置简介
logback是一套日志框架,由log4j的优化版,由同一个作者开发,在速度和性能上都超过其他日志框架,再结合slf4j,已成为当前最流行的日志框架. Logback最常用就是在classpath定义 ...
- VS2010生成安装包制作步骤 (转)
阅读目录 VS2010生成安装包制作步骤 回到目录 VS2010生成安装包制作步骤 在VS2010中文旗舰版本中生成winForm安装包,可以复制你电脑中的开发环境,避免你忘记了一下配置然后在别的 ...
- C# 使用委托实现多线程调用窗体的四种方式(转)
1.方法一:使用线程 功能描述:在用c#做WinFrom开发的过程中.我们经常需要用到进度条(ProgressBar)用于显示进度信息.这时候我们可能就需要用到多线程,如果不采用多线程控制进度条,窗口 ...
- mysql 主从复制change master to
CHANGE MASTER TO命令用于slave配置连接master的信息,例如master host.master port等. 关于CHANGE MASTER TO命令,总结几点使用心得. 在C ...
- Linux下Python与C++混合编程
最近在做一个CUDA的项目,记录下学习心得. 系统 Linux --generic #-Ubuntu x86_64 GNU/Linux C++调用Python Python模块代码: #!/usr/b ...
- nginx配置遇到的一个大坑
鄙人负责的项目即将上线,今天团队伙伴反应网站上的图片,有的可以显示有的不可以显示报404,找我看看问题. 我心想啊,404,应该是没有文件才出的,于是,我直接上nginx服务器上查看,检查路径下是否有 ...