• 简单选择排序


      在上一个文章当中,我讲解了冒泡排序,冒泡排序的时间复杂度是O(N^2),今天,我又给大家介绍一个排序算法“简单选择排序”,顾名思义,我们就是要在数组里面来选择,选择什么呢?如果是想要从小到大排序,就每一次选择最小的数字,反之,就选择最大的数字。

      简单选择排序,每一次找一个最小(大)的数,需要O(N)的时间,再加上我们要进行N次找最小(大)的数,所以,我们的时间复杂度为O(N^2)。

      我们可以举个例子来讲:

     

      上图是我们的原始序列,我们先从j=0开始,到 j=5停止,在这6个数字之中来寻找最少的,经过N次比较,我们知道了,2是第一次求出最小的数字,所以2我们将其排在第一位,为了不多建立一个空间,我们可以在原始数组里面操作,怎么操作呢?

      在原始数组里面,2是在地址为5是空间里面,但是它是最小的数字,必须要排到第一位,但是第一位是19,替换过后19不就没了吗?所以,我们可以进行一次互换位置,将2和9进行位置转换。

       在将2和19换了之后,我们从j=1开始,到j=5停止之间来寻找最小的数(不用找地址区间为1的了,因为它已经正确排序),我们找到了4这个数,可以将4和54来进行位置互换。

      2和4是正确的位置,然后继续找最小的数,19,将19和54交换。

     

    30是最小的数字,并且刚好在正确位置上,所以不用多此一举,在程序里面需要一个特例。

     

    54是最小的,将54和70换位置。

    最后,只有70一个数字了,我们就可以直接默认它是最大的那个数。

      这就是我们整个简单选择排序算法的大概意思,给大家看一看代码:

    简单选择排序C语言代码:

    1. #include
    2. #include
    3. using namespace std;
    4. void printArray(const int *a,int n)
    5. {
    6. for(int i=0;i
    7. printf("%d ",a[i]);
    8. printf("\n");
    9. }
    10. void swap(int *p1,int *p2){
    11. int t;
    12. t=*p1;
    13. *p1=*p2;
    14. *p2=t;
    15. }
    16. void selectionSort(int *array,int size){
    17. int min,minv;
    18. for(int i=0;i-1;i++){
    19. minv=array[i];
    20. min=i;
    21. for(int j=i+1;j
    22. if(array[j]
    23. minv=array[j];
    24. min=j;
    25. }
    26. }
    27. if(min-i!=0) swap(&array[i],&array[min]);
    28. printf("%d: ",i);
    29. printArray(array,size);
    30. }
    31. }
    32. int main(){
    33. int n;
    34. scanf("%d",&n);
    35. int array[n];
    36. for(int i=0;iscanf("%d",&array[i]);
    37. printArray(array,n);
    38. selectionSort(array,n);
    39. printArray(array,n);
    40. }

     简单选择排序C++代码:

    1. #include
    2. using namespace std;
    3. int main(){
    4. int n;
    5. cin>>n;
    6. int a[n],x,min;
    7. for(int i=0;i
    8. cin>>a[i];
    9. for(int i=0;i
    10. min=0x99999999,x=0;
    11. for(int j=i;j
    12. if(a[j]
    13. min=a[j],x=j;
    14. }
    15. }
    16. swap(a[i],a[x]);
    17. }
    18. for(int i=0;i
    19. cout<",";
    20. return 0;
    21. }

       大家看,C语言与C++的代码长度相差了那么多,是为什么呢?是因为C++里面拥有STL库,里面有已经提前编好的函数,直接拿来用就可以,而C语言就只能自己编了!

      今天就到这里了,下次给大家带来简单插入排序!

  • 相关阅读:
    怎么缓存当前的组件?缓存后怎么更新?
    Brief. Bioinformatics2021 | sAMP-PFPDeep+:利用三种不同的序列编码和深度神经网络预测短抗菌肽
    “微软冲着 Linux 大喊:快看,你这也有提权漏洞”
    Windows OpenGL 图像透明度调节
    湖仓一体电商项目(四):项目数据种类与采集
    汽车金融市场研究:预计2029年将达到482亿美元
    操作系统相关
    滚珠螺杆的螺母朝向反了能用吗?
    C#中.NET 7.0 Windows窗体应用通过EF访问新建数据库
    Flink
  • 原文地址:https://blog.csdn.net/wo_ai_luo_/article/details/127114830