086.冒泡排序的缺点及解决方案
我们上节课,处理排序的文本数据,就10个数据(一行一个).
如果有10个数据.
第一次需要循环9次.
第二次需要循环8次.
第三次需要循环7次.
……
第八次需要循环2次.
如果有100万个数据.
第1次需要循环999999次
第2次需要循环999998次
第3次需要循环999997次
第999998次需要2次.
如果数据是100万,1000万,需要多长时间呢?我们来测试一下
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int gettimestamp() {
time_t l_now;
time(&l_now);
return(int)l_now;
}
void randmize(int p_v1) {
srand(p_v1);
}
int rand(int p_min, int p_max) {
return rand() % (p_max - p_min + 1) + p_min;
}
void paixu(int *l_array, int count) {
int l_length = count;
char l_temp;
for (size_t i = 0; i < l_length - 1; i++)
{
for (size_t ii = i + 1; ii <= l_length - 1; ii++)
{
if (l_array[i] < l_array[ii]) {
l_temp = l_array[ii];
l_array[ii] = l_array[i];
l_array[i] = l_temp;
}
}
}
}
void main1() {
int time = gettimestamp();
randmize(time);
int l_length = 10;
int *p = (int *)calloc(l_length, sizeof(int));
for (size_t i = 0; i < l_length; i++)
{
p[i] = rand(1, 100);
printf("%d\n", p[i]);
}
FILE * write = fopen("1.txt", "w");
if (write != NULL) {
char out[20] = { 0 };
for (size_t i = 0; i < l_length; i++)
{
sprintf(out, "%d\n", p[i]);
fputs(out, write);
}
}
fclose(write);
free(p);
system("pause");
}
void main() {
FILE*read = fopen("1.txt", "r");
char out[20] = { 0 };
int *p = NULL;
int count = NULL;
int ccc = NULL;
int length = 10;
if (read != NULL)
{
while (feof(read) == 0) {
fgets(out, length, read);
int cccc = ftell(read);
if (ccc != cccc) {
count++;
p = (int *)realloc(p, count * sizeof(int));
p[count - 1] = atoi(out);
}
}
}
int strat = gettimestamp();
int * b = (int *)calloc(1000, sizeof(int));
for (size_t i = 0; i < count; i++)
{
int bibi = p[i];
b[bibi - 1] = b[bibi - 1] + 1;
}
int end = gettimestamp();
printf("%d\n", end - strat);
FILE * write = fopen("2.txt", "w");
if (write != NULL) {
char out[20] = { 0 };
for (size_t i = 0; i < 1000; i++)
{
sprintf(out, "%d\n", i+1);
for (size_t ii = 0; ii < b[i]; ii++)
{
fputs(out, write);
}
}
}
fclose(read);
free(p);
system("pause");
}
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int gettimestamp() {
time_t l_now;
time(&l_now);
return(int)l_now;
}
void randmize(int p_v1) {
srand(p_v1);
}
int rand(int p_min, int p_max) {
return rand() % (p_max - p_min + 1) + p_min;
}
void paixu(int *l_array, int count) {
int l_length = count;
char l_temp;
for (size_t i = 0; i < l_length - 1; i++)
{
for (size_t ii = i + 1; ii <= l_length - 1; ii++)
{
if (l_array[i] < l_array[ii]) {
l_temp = l_array[ii];
l_array[ii] = l_array[i];
l_array[i] = l_temp;
}
}
}
}
void main1() {
int time = gettimestamp();
randmize(time);
int l_length = 10;
int *p = (int *)calloc(l_length, sizeof(int));
for (size_t i = 0; i < l_length; i++)
{
p[i] = rand(1, 100);
printf("%d\n", p[i]);
}
FILE * write = fopen("1.txt", "w");
if (write != NULL) {
char out[20] = { 0 };
for (size_t i = 0; i < l_length; i++)
{
sprintf(out, "%d\n", p[i]);
fputs(out, write);
}
}
fclose(write);
free(p);
system("pause");
}
void main() {
FILE*read = fopen("1.txt", "r");
char out[20] = { 0 };
int *p = NULL;
int count = NULL;
int ccc = NULL;
int length = 10;
if (read != NULL)
{
while (feof(read) == 0) {
fgets(out, length, read);
int cccc = ftell(read);
if (ccc != cccc) {
count++;
p = (int *)realloc(p, count * sizeof(int));
p[count - 1] = atoi(out);
}
}
}
int strat = gettimestamp();
paixu(p, count);
int end = gettimestamp();
printf("%d\n", end - strat);
FILE * write = fopen("2.txt", "w");
if (write != NULL) {
char out[20] = { 0 };
for (size_t i = 0; i < count; i++)
{
sprintf(out, "%d\n", p[i]);
fputs(out, write);
}
}
fclose(read);
free(p);
system("pause");
}
转载于:https://www.cnblogs.com/xiaodaxiaonao/p/9032152.html
086.冒泡排序的缺点及解决方案相关推荐
- 什么是单页应用?它的优缺点?其缺点的解决方案是什么?
文章目录 一.什么是单页应用? 二.单页应用的优缺点 1.优点 2.缺点 三.单页应用缺点的解决方案 一.什么是单页应用? 从字面上来理解: 单页面应用(SPA--------single page ...
- python 缺点-Python的3个主要缺点及其解决方案
Python问世至今已经三十年左右了,但其仅在过去几年人气迅速飙升超过了除java和C以外的其他语言.总的来说,Python已经成为教学.学习编程和软件开发的优秀起点,而且其可以成为任何技术栈中有价值 ...
- 数据拆分缺点和解决方案
MySQL垂直拆分和水平拆分的优缺点和共同点总结 数据的拆分(Sharding)根据其拆分分规则的类型,可以分为两种拆分模式.一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这 ...
- 竹炭纤维集成墙面板装修的缺点是什么,有哪些弊端
据统计,这几年当中,集成墙面的使用率已经从最开始的5%上升到了12%.而且还以更加快速的发展速度再推进.这么快的加速发展普及,归根结底,不得不说来自对传统非集成墙面装修的缺点的解决方案,为集成墙面装饰 ...
- python 实现冒泡排序的思路和代码
当需求提到需要从小到大的排序时,我们很自然的就会想起最基础的"冒泡排序" 冒泡排序的原理就不再多说了,网上有一大堆,以下是python实现冒泡排序的代码. 对于冒泡排序算法,如果有 ...
- 【算法入门】用Python手写五大经典排序算法,看完这篇终于懂了!
算法作为程序员的必修课,是每位程序员必须掌握的基础.作为Python忠实爱好者,本篇将通过Python来手撕5大经典排序算法,结合例图剖析内部实现逻辑,对比每种算法各自的优缺点和应用点.相信我,耐心看 ...
- 用Python手写五大经典排序算法,看完这篇终于懂了!
算法作为程序员的必修课,是每位程序员必须掌握的基础.作为Python忠实爱好者,本篇东哥将通过Python来手撕5大经典排序算法,结合例图剖析内部实现逻辑,对比每种算法各自的优缺点和应用点.相信我,耐 ...
- 设计RPC接口时,你有考虑过这些吗?
RPC 框架的讨论一直是各个技术交流群中的热点话题,阿里的 dubbo,新浪微博的 motan,谷歌的 grpc,以及不久前蚂蚁金服开源的 sofa,都是比较出名的 RPC 框架.RPC 框架,或者一 ...
- httpservlet.java:131_Servlet学习1:Http状态码、多个Servlet之间调用规则、多个Servlet之间数据共享实现方案...
Http状态码 1.介绍: 1)由三位数字组成的一个符号. 2)Http服务器在推送响应包之前,根据本次请求处理情况将Http状态码写入到响应包中[状态行]上 3)如果Http服务器针对本次请求,返回 ...
最新文章
- Python中的lambda是什么?
- [深度学习]实现一个博弈型的AI,从五子棋开始(1)
- 浙大计算机硕士比本科985,二本出身的985研究生与985本科生,哪个更厉害?网友:差的太多!...
- [翻译]API Guides - Bound Services
- python下载文件保存_从URL下载文件并将其保存在Python文件夹中
- 请求到后台百分号被删除原因_接口测试平台代码实现85: 全局请求头1
- 错误: 找不到或无法加载主类
- 不好好写代码,就只能回去当总理了!
- C++基础篇之抽象类的接口
- scrapy 处理动态加载,使用phantomjs
- 再谈“颠覆”冯.诺依曼计算机体系结构 —— 计算机的未来发展方向:去内存化...
- flowable工作流所有业务概念
- SeaweedFS使用小结
- 51单片机农历转换公历c语言算法,51单片机阳历转农历(仅仅是阳历转阴历例程)...
- 云计算基础与应用 第七章 CDN
- 产品研发中存在的问题和缺陷
- 0x80070057复制从服务器复制文件,0x80070057各种错误解决方法教程
- 使用短信验证方式登录短视频系统,轻松规避数据臃肿
- adb shell input keyevent 模拟按键事件
- i5处理器做java够用吗,一般的游戏玩家用i5处理器就够了,这是真的吗?
热门文章
- mysql集群session_集群/分布式环境下5种session处理策略
- ubuntu 18.04.4 安装 bazel
- 2.Java中String,StringBuilder以及StringBuffer的关系与区别
- 去水印--《On the Effectiveness of Visible Watermarks》
- 语义分割--DeconvNet--Learning Deconvolution Network for Semantic Segmentation
- LeetCode 316. Remove Duplicate Letters--贪心--Java,C++,Python解法
- 管理距离 路由与交换_动态路由选择原理(距离矢量路由协议RIP)
- java简体(繁体)转换器
- linux 定时重启mysql_Linux下定时自动重启apache及mysql
- 突然吐字不清_突然口齿不清是什么病