首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >选择排序

选择排序

作者头像
花狗Fdog
发布2022-06-17 09:21:44
2630
发布2022-06-17 09:21:44
举报
文章被收录于专栏:花狗在Qt花狗在Qt

排序系列:

冒泡排序


选择排序(Select Sort) 是直观的排序,通过一个中间量从带排序的的数中找出最大或最小的交换到对应位置。再选择次之。选择排序和冒泡排序一样,都有两层循环。

让我们通过动态图来看一下选择排序的过程图:

让我们通过动态图来看一下选择排序的过程图:

这个动态图演示了一个无序数组使用选择排序转变为一个从大到小的有序数组,让我们来观察一下,在进入内循环之前,会记录一个值,这个值是当前外层循环Ai的值,之后拿着这个值,在内循环遍历数组的时候,跟数组的元素一个一个的比较,如果这个值比当前下标的元素的大,那么就双方的值继续交换,内循环完成后,将这个值再赋值给Ai,经过内循环怎么一折腾,最后Ai一定是拿到最小或者最大的值。

和冒泡排序不一样的是冒泡排序如果两个不一样当场就交换,而选择排序是将值给了一个中间变量,让这个中间变量加入内循环,等内循环结束,把真正最大或者最小的值赋值给外出循环的Ai。


选择排序原理总结

1记录数组第一个元素的值(数组长度n)。 2遍历n-1次,用该值与其他元素比较,找到最大或者最小的一个数交换。 3记录数组第二个元素的值。 4遍历n-2次,用该值与其他元素比较,找到最大或者最小的一个数交换。 5重复上述步骤,遍历N次,直到没有要比较的数。


代码

  int array[] = { 7,10,12,3,9,5 };
  for (int i = 0; i < 6; i++)
  {
    int minkey = array[i];
    for (int j = i + 1; j < 6; j++)
    {
      if (minkey < array[j])
      {
        int tamp = array[j];
        array[j] = minkey;
        minkey = tamp;
      }
    }
    array[i] = minkey;
  }

原代码有一些问题,下面是修改后的代码

  int array[] = { 7,10,12,3,9,5 };
  for (int i = 0; i < 6; i++)
  {
    int minkey = i;
    for (int j = i + 1; j < 6; j++)
    {
      if (array[minkey] > array[j])
      {
      	minkey = j;
      }
    }
      int tamp = array[i];
      array[i] = array[minkey];
      array[minkey] = tamp;
  }

还是有错,再次修改。

  int array[] = { 7,10,12,3,9,5 };
  for (int i = 0; i < 5; i++)
  {
    int minkey = i;
    for (int j = i + 1; j < 6; j++)
    {
      if (array[minkey] > array[j])
      {
      	minkey = j;
      }
    }
      int tamp = array[i];
      array[i] = array[minkey];
      array[minkey] = tamp;
  }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 选择排序原理总结
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档