我们上节课,处理排序的文本数据,就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. 什么是单页应用?它的优缺点?其缺点的解决方案是什么?

    文章目录 一.什么是单页应用? 二.单页应用的优缺点 1.优点 2.缺点 三.单页应用缺点的解决方案 一.什么是单页应用? 从字面上来理解: 单页面应用(SPA--------single page ...

  2. python 缺点-Python的3个主要缺点及其解决方案

    Python问世至今已经三十年左右了,但其仅在过去几年人气迅速飙升超过了除java和C以外的其他语言.总的来说,Python已经成为教学.学习编程和软件开发的优秀起点,而且其可以成为任何技术栈中有价值 ...

  3. 数据拆分缺点和解决方案

    MySQL垂直拆分和水平拆分的优缺点和共同点总结 数据的拆分(Sharding)根据其拆分分规则的类型,可以分为两种拆分模式.一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这 ...

  4. 竹炭纤维集成墙面板装修的缺点是什么,有哪些弊端

    据统计,这几年当中,集成墙面的使用率已经从最开始的5%上升到了12%.而且还以更加快速的发展速度再推进.这么快的加速发展普及,归根结底,不得不说来自对传统非集成墙面装修的缺点的解决方案,为集成墙面装饰 ...

  5. python 实现冒泡排序的思路和代码

    当需求提到需要从小到大的排序时,我们很自然的就会想起最基础的"冒泡排序" 冒泡排序的原理就不再多说了,网上有一大堆,以下是python实现冒泡排序的代码. 对于冒泡排序算法,如果有 ...

  6. 【算法入门】用Python手写五大经典排序算法,看完这篇终于懂了!

    算法作为程序员的必修课,是每位程序员必须掌握的基础.作为Python忠实爱好者,本篇将通过Python来手撕5大经典排序算法,结合例图剖析内部实现逻辑,对比每种算法各自的优缺点和应用点.相信我,耐心看 ...

  7. 用Python手写五大经典排序算法,看完这篇终于懂了!

    算法作为程序员的必修课,是每位程序员必须掌握的基础.作为Python忠实爱好者,本篇东哥将通过Python来手撕5大经典排序算法,结合例图剖析内部实现逻辑,对比每种算法各自的优缺点和应用点.相信我,耐 ...

  8. 设计RPC接口时,你有考虑过这些吗?

    RPC 框架的讨论一直是各个技术交流群中的热点话题,阿里的 dubbo,新浪微博的 motan,谷歌的 grpc,以及不久前蚂蚁金服开源的 sofa,都是比较出名的 RPC 框架.RPC 框架,或者一 ...

  9. httpservlet.java:131_Servlet学习1:Http状态码、多个Servlet之间调用规则、多个Servlet之间数据共享实现方案...

    Http状态码 1.介绍: 1)由三位数字组成的一个符号. 2)Http服务器在推送响应包之前,根据本次请求处理情况将Http状态码写入到响应包中[状态行]上 3)如果Http服务器针对本次请求,返回 ...

最新文章

  1. Python中的lambda是什么?
  2. [深度学习]实现一个博弈型的AI,从五子棋开始(1)
  3. 浙大计算机硕士比本科985,二本出身的985研究生与985本科生,哪个更厉害?网友:差的太多!...
  4. [翻译]API Guides - Bound Services
  5. python下载文件保存_从URL下载文件并将其保存在Python文件夹中
  6. 请求到后台百分号被删除原因_接口测试平台代码实现85: 全局请求头1
  7. 错误: 找不到或无法加载主类
  8. 不好好写代码,就只能回去当总理了!
  9. C++基础篇之抽象类的接口
  10. scrapy 处理动态加载,使用phantomjs
  11. 再谈“颠覆”冯.诺依曼计算机体系结构 —— 计算机的未来发展方向:去内存化...
  12. flowable工作流所有业务概念
  13. SeaweedFS使用小结
  14. 51单片机农历转换公历c语言算法,51单片机阳历转农历(仅仅是阳历转阴历例程)...
  15. 云计算基础与应用 第七章 CDN
  16. 产品研发中存在的问题和缺陷
  17. 0x80070057复制从服务器复制文件,0x80070057各种错误解决方法教程
  18. 使用短信验证方式登录短视频系统,轻松规避数据臃肿
  19. adb shell input keyevent 模拟按键事件
  20. i5处理器做java够用吗,一般的游戏玩家用i5处理器就够了,这是真的吗?

热门文章

  1. mysql集群session_集群/分布式环境下5种session处理策略
  2. ubuntu 18.04.4 安装 bazel
  3. 2.Java中String,StringBuilder以及StringBuffer的关系与区别
  4. 去水印--《On the Effectiveness of Visible Watermarks》
  5. 语义分割--DeconvNet--Learning Deconvolution Network for Semantic Segmentation
  6. LeetCode 316. Remove Duplicate Letters--贪心--Java,C++,Python解法
  7. 管理距离 路由与交换_动态路由选择原理(距离矢量路由协议RIP)
  8. java简体(繁体)转换器
  9. linux 定时重启mysql_Linux下定时自动重启apache及mysql
  10. 突然吐字不清_突然口齿不清是什么病