100万个整数,进行冒泡排序,半天也没结果,如何改进?

解书黎 2019-11-08 09:23:19
100万个数是从txt文件读取的,放入数组chuxue中

int a=1000000;
for(int b=1;b<a;b++)
{
for(int c=0;c<a-b;c++)
{
z=chuxue[c];
chuxue[c]=chuxue[c+1];
chuxue[c+1]=z;

}
}



开发环境(IDE):CodeBlocks,win7操作系统32位,控制台程序

经测试,半天也没有排完,请问如何改进?谢谢
...全文
371 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
解书黎 2019-11-13
  • 打赏
  • 举报
回复
感谢大家提供这么多资源,但我是初学,有的概念都没听说过
wowpH 2019-11-13
  • 打赏
  • 举报
回复
引用 15 楼 解书黎 的回复:
感谢大家提供这么多资源,但我是初学,有的概念都没听说过
如果已经解决,麻烦及时在电脑网页上结贴。 如果没有解决,可继续追问。 CSDN论坛新手指南
Wayward:) 2019-11-11
  • 打赏
  • 举报
回复
引用 10 楼 解书黎 的回复:
不好意思,发错源代码了,更正如下

int a=1000000;
for(int b=1;b<a;b++)
{
     for(int c=0;c<a-b;c++)
     {
          if(chuxue[c]>chuxue[c+1])
          {
              z=chuxue[c];
              chuxue[c]=chuxue[c+1];
              chuxue[c+1]=z;
          }
    }
}
就是复杂度太高的问题把, 可以想到的一个小优化,是判断一下序列是否已经是有序的: 即先设置一个标志位flag=0,如果发生过一次交换则设置成1; 如果,没有发生过交换,则提前退出,但是对于复杂度的优化作用不大,还是O(n^2)。

int a=1000000;
for(int b=1;b<a;b++)
{
     int flag = 0;
     for(int c=0;c<a-b;c++)
     {
          if(chuxue[c]>chuxue[c+1])
          {
              flag  = 1;
              z=chuxue[c];
              chuxue[c]=chuxue[c+1];
              chuxue[c+1]=z;
          }// if
    }// for
    if(flag == 0) break;
}
朱铭德 2019-11-11
  • 打赏
  • 举报
回复
给你两种快到没朋友的数据结构吧: 1.unordered_map<int,int>,时间复杂度O(N+INT_MAX),100万数字再多一百倍都是这个时间复杂度… 2.map<int,int>,时间复杂度O(NlogN),重复数字多的话可以碾压快排,最差和快排一样(内存是要多占些)
mymtom 2019-11-11
  • 打赏
  • 举报
回复
冒泡排序的复杂度位O(N^2), 百万级的数据没法用,建议直接用<stdlib.h> 里的 qsort 复杂度 O(N*lgN)
  • 打赏
  • 举报
回复
https://blog.csdn.net/HYNN12/article/details/102459171 进入这个链接,里面有各种 排序算法 的思路和源码,希望对你有所帮助
解书黎 2019-11-10
  • 打赏
  • 举报
回复
不好意思,发错源代码了,更正如下

int a=1000000;
for(int b=1;b<a;b++)
{
for(int c=0;c<a-b;c++)
{
if(chuxue[c]>chuxue[c+1])
{
z=chuxue[c];
chuxue[c]=chuxue[c+1];
chuxue[c+1]=z;
}
}
}
Wayward:) 2019-11-10
  • 打赏
  • 举报
回复
而且我看题主也没有写对冒泡排序啊, 连比较和交换操作都没有?? 直接相邻交换也叫排序吗?
Wayward:) 2019-11-10
  • 打赏
  • 举报
回复
这。。。100万个数还用冒泡排序,也是优秀啊。 你可以试一下C++自带的快速排序

#include<algorithm>
sort(chuxue,chuxue+a);// 从小到大排序
「已注销」 2019-11-09
  • 打赏
  • 举报
回复
引用 6 楼 解书黎 的回复:
我是初学,别的排序还没学 请问下,我的冒泡排序可以改进吗?
冒泡没什么可改进的,既然你是int类型的数据,用位运算交换应该能快一点,但也没多少作用

chuxue[c] = chuxue[c] ^ chuxue[c+1];
chuxue[c+1]=chuxue[c+1] ^ chuxue[c];
chuxue[c]=chuxue[c] ^ chuxue[c+1];
解书黎 2019-11-09
  • 打赏
  • 举报
回复
我是初学,别的排序还没学
请问下,我的冒泡排序可以改进吗?
不闻窗外事 2019-11-09
  • 打赏
  • 举报
回复
快速排序算法,可以试一下
  • 打赏
  • 举报
回复
无论哪种排序交换数据前需要判断一下才需要交换数据的位置。
IT_熊 2019-11-08
  • 打赏
  • 举报
回复
插入排序也比这个快
「已注销」 2019-11-08
  • 打赏
  • 举报
回复
100万 别冒泡了,整别的排序吧
qq_26379401 2019-11-08
  • 打赏
  • 举报
回复
你确定这是冒泡排序?

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧