0


数据结构--排序之选择排序

●🧑个人主页:你帅你先说.
●📃欢迎点赞👍关注💡收藏💖
●📖既选择了远方,便只顾风雨兼程。
●🤟欢迎大家有问题随时私信我!
●🧐版权:本文由[你帅你先说.]原创,CSDN首发,侵权必究。

🍌简单选择排序基本思想及其代码实现

选择排序即每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。

🍊图解过程
每一趟排序都选出一个最小值放在前面,刚开始我们先假设最小的数是第一个
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从这开始后面都比下标3对应的值大了,min不会再变了,再这里就不演示了。
第一趟排序找到min后与下标为

0

的数进行交换。
在这里插入图片描述
这样,一趟选择排序就完成了,第二趟排序找到最小值与下标为

1

的数进行交换,依次类推下去。
🥥动图演示:
在这里插入图片描述
🫐代码实现:

Swap(int* x,int* y){int tmp =*x;*x =*y;*y = tmp;}voidSelectSort(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;//将最小值的下标赋值给min}//交换最小值Swap(&a[min],&a[i]);}}

在这里我们要实现一种更优化的方式,上面这种一次交换一个值,而我们一次交换两个值,代码如下:

voidSelectSort(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]);// begin == maxi时,最大被换走了,修正一下maxi的位置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)

🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊
觉得写的不错可以给个

一键三连

点赞👍关注💡收藏💖
🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊


本文转载自: https://blog.csdn.net/qq_52363432/article/details/122771219
版权归原作者 你帅你先说. 所有, 如有侵权,请联系我们删除。

“数据结构--排序之选择排序”的评论:

还没有评论