您的位置:首页 > 房产 > 建筑 > 中国企业排名100强_网上服务大厅官网_关键词排名优化公司地址_做网站找哪个公司好

中国企业排名100强_网上服务大厅官网_关键词排名优化公司地址_做网站找哪个公司好

2024/12/23 3:46:28 来源:https://blog.csdn.net/wheeldown/article/details/143486561  浏览:    关键词:中国企业排名100强_网上服务大厅官网_关键词排名优化公司地址_做网站找哪个公司好
中国企业排名100强_网上服务大厅官网_关键词排名优化公司地址_做网站找哪个公司好
  1. 选择排序的基本思想:
    每⼀次从待排序的数据元素中选出最⼩(或最⼤)的⼀个元素,存放在序列的起始位置,直到全部待
    排序的数据元素排完。

直接选择排序的动图演示

在这里插入图片描述


  1. 选择排序的思路
  • 准备我们给定一个随机排列的数组arr[],在数组中找好元素对应的下标
  • 在待排序的数组元素中,找出最大(最小)的数据元素;
  • 如果找出来的这个最大(最小)数据元素不是这个数组中的第一个元素,则与数组中的最后一个元素(第一个元素)进行交换;
  • 交换完之后已排序的元素+1,待排序的元素-1,再从待排序的元素序列中重复,知道集合剩下最后一个元素最小(最大)元素;

大致思路代码:

在这里插入图片描述

选择排序总体思路解析

  • 定义最大和最小都在第一个元素,后续遍历找出最大(最小)
  • 遍历完之后找出的maxi和mini分别和end和begin交换
  • 注意:为了避免maxi和begin都在同一个位置。遍历完之后,mini与begin交换后,maxi反倒成了最小的元素。我们给予判断条件:如果maxi和begin同一位置,那么将mini的值给maxi,也不妨碍后续交换

代码实现:

void SelectSort(int* arr, int n)
{int begin = 0;//首位置int end = n - 1;//末位置while (begin < end){int maxi = begin, mini = begin;//最大值和最小值的定义,每次循环都让maxi和mini处于首元素for (int i = begin + 1; i <= end; i++){if (arr[i] > arr[maxi]){maxi = i;}if (arr[i] < arr[mini]){mini = i;}}if (maxi == begin)//为了防止出现交换差错,让maxi成了最小{maxi = mini;}Swap(&arr[mini], &arr[begin]);Swap(&arr[maxi], &arr[end]);++begin;--end;}
}

在这里插入图片描述

时间复杂度:O(n^2)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com