●🧑个人主页:你帅你先说. ●📃欢迎点赞👍关注💡收藏💖 ●📖既选择了远方,便只顾风雨兼程。 ●🤟欢迎大家有问题随时私信我! ●🧐版权:本文由[你帅你先说.]原创,CSDN首发,侵权必究。
🍌简单选择排序基本思想及其代码实现
选择排序即每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。
🍊图解过程 每一趟排序都选出一个最小值放在前面,刚开始我们先假设最小的数是第一个 从这开始后面都比下标3对应的值大了,min不会再变了,再这里就不演示了。 第一趟排序找到min后与下标为0 的数进行交换。 这样,一趟选择排序就完成了,第二趟排序找到最小值与下标为1 的数进行交换,依次类推下去。 🥥动图演示: 🫐代码实现:
Swap(int* x,int* y)
{
int tmp = *x;
*x = *y;
*y = tmp;
}
void SelectSort(int* a, int n)
{
int temp;
for(i=0;i<n;i++)
{
min=i;
for(j=i+1;j<n;j++)
{
if(a[j]<a[min])
min=j;
}
Swap(&a[min],&a[i]);
}
}
在这里我们要实现一种更优化的方式,上面这种一次交换一个值,而我们一次交换两个值,代码如下:
void SelectSort(int* a, int n)
{
int begin = 0,
int end = n - 1;
while (begin < end)
{
int mini = begin, maxi = begin;
for (int i = begin; i <= end; i++)
{
if (a[i] < a[mini])
mini = i;
if (a[i] > a[maxi])
maxi = i;
}
Swap(&a[begin], &a[mini]);
if (begin == maxi)
maxi = mini;
Swap(&a[end], &a[maxi]);
begin++;
end--;
}
}
对于代码中的修正maxi部分,我给大家举个例子就懂了。 你会发现交换了个寂寞 你会发现交换回原来的位置 很明显选择排序的时间复杂度是:O(
N
2
N^2
N2) 最好时间复杂度:O(
N
2
N^2
N2) 最坏时间复杂度:O(
N
2
N^2
N2) 整体而言最差的排序,因为无论什么情况都是O(
N
2
N^2
N2) 🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊 觉得写的不错可以给个一键三连 点赞👍关注💡收藏💖 🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊
|