鱼C论坛

 找回密码
 立即注册
查看: 4221|回复: 7

关于一个排序算法

[复制链接]
发表于 2020-12-20 20:43:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     int num[10] = {10,9,8,7,6,5,4,3,2,1};

  6.     for (int i = 0;i < 10;i++)
  7.     {
  8.         cout<<num[i]<<' ';
  9.     }
  10.     cout<<endl;

  11.     int max = num[0];

  12.     for (int i = 0;i < 10;i++)
  13.     {
  14.         if (num[i] > max)
  15.         {
  16.             max = num[i];
  17.         }
  18.     }
  19.    
  20.     int sort[10],min = num[0],tmp;

  21.     for (int i = 0;i < 10;i++)
  22.     {
  23.         sort[i] = max;
  24.     }

  25.     for (int i = 0;i < 10;i++)
  26.     {
  27.         for (int j = 0;j < 10;j++)
  28.         {
  29.             if (num[j] < min)
  30.             {
  31.                 min = num[j];
  32.                 tmp = j;
  33.             }
  34.         }

  35.         sort[i] = min;
  36.         num[tmp] = max;
  37.     }

  38.     for (int i = 0;i < 10;i++)
  39.     {
  40.         cout<<sort[i]<<' ';
  41.     }
  42.    
  43.     return 0;
  44. }
复制代码


这是比赛的时候临时想出来的一个算法(主要是因为快速排序那样的算法忘了
比赛的时候是对的
我回家再打了一遍结果不到是不是忘了,做错了
大佬们看看哪错了

主要思路:
先给定一个原始数组(num[])
在每次找出最小数塞入新数组(sort[])
比较过的最小数变成最大数

如果这是一个新算法
请大家千万不要以自己的名义发布出去
因为这可能是我先想出来的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-20 20:47:09 | 显示全部楼层
二次编辑:清一定要看
补充最后一部分:
如果这个算法没错,只是环境设定有问题
请大家不要发布

如果设个算法本身有问题且是你修改的
你可以发布(可以跟我说一下)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-20 21:08:02 | 显示全部楼层
这不就是选择排序的思想吗,比选择排序还要暴力,而且min从第一次找到最小之后还没有去更新,导致最后输出的都是数组最小的元素
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-20 22:14:39 | 显示全部楼层
baige 发表于 2020-12-20 21:08
这不就是选择排序的思想吗,比选择排序还要暴力,而且min从第一次找到最小之后还没有去更新,导致最后输出 ...

我在num[tmp] = max;更新了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-21 03:02:01 | 显示全部楼层
兄嘚,这不就是传说中的 泡泡排序 嘛。。。每次找最小值放在前面,不对这个比冒泡还慢一点
我看你的代码是不是想每次搜最大最小让后加到新的里面,然后再搜最大最小?直到原列表空为止?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-21 16:41:26 | 显示全部楼层
Sebass 发表于 2020-12-21 03:02
兄嘚,这不就是传说中的 泡泡排序 嘛。。。每次找最小值放在前面,不对这个比冒泡还慢一点
我看 ...

每次找最小值塞到新数组里
搜过的最小值变成最大值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-22 00:12:59 | 显示全部楼层
冰清玉洁丸 发表于 2020-12-21 16:41
每次找最小值塞到新数组里
搜过的最小值变成最大值

我没太看懂哦,你给我举个例子呗。搜过的最小值怎么变成最大啊。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-17 14:58:02 | 显示全部楼层
这不是啥新算法(新算法早被发明出来了)其实是选择排序,代码有两个问题:
1. 33行j应初始为i+1
2. 32行后就得初始化tmp与min,tmp=i(设最小值位置是i),min=a[i](设最小值为a[i])
3. 完全没有记录sort的必要,如果在你的代码上改,那就是这样:
  1. for (int i = 0;i < 10;i++)
  2.     {
  3.             int tmp=i,min=num[i];
  4.         for (int j = i+1;j < 10;j++)
  5.         {
  6.             if (num[j] < min)
  7.             {
  8.                 min = num[j];
  9.                 tmp = j;
  10.             }
  11.         }
  12.                 swap(num[tmp],num[i]);
  13.     }
复制代码

简单写法:
  1.     for (int i=0;i<10;++i)
  2.             for (int j=i+1;j<10;++j)
  3.                     if (num[i]>num[j])
  4.                             swap(num[i],num[j]);
复制代码

stl写法:
  1. sort(num,num+10);
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 20:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表