美文网首页
简单排序之选择排序

简单排序之选择排序

作者: 砌月东谷 | 来源:发表于2021-07-07 06:31 被阅读0次

选择排序改进了冒泡排序,将必要的交换次数从O(N²)减少到O(N)。但是比较的次数仍保持为O(N²)。然而,选择排序仍然为大记录量的排序提出了一个非常重要的改进,因为这些大量的记录需要在内存中移动,这就使交换的时间和比较的时间相比起来,交换的时间更为重要。(一般来说,在java语言中不是这种情况,java中只是改变了引用的位置,而实际对象的位置并没有发送改变)

用选择排序算法对篮球队员排序

篮球队员站在一排,高低不齐,排序从球员队列的最左边开始,在记录本上记录下最左端球员的身高,并且把紫红色的毛巾放在这个队员的前面。于是开始用下一个队员的身高和记录本上记录的值相比较。如果这个队员更矮,则划掉第一个球员的身高,记录下第二个队员的身高;同时移动毛巾,把它放在这个新的最矮的队员前面,继续沿着队列走下去,每一个队员都和记录本上的最小值进行比较。当发现更矮的队员时,就更新记录本上的最小值并且移动毛巾。做完这些时期后,毛巾就会落在最矮的队员前面

然后这个最矮的队员和队列最左边的队员交换位置。现在已经对一个队员拍好了序,这期间做了N-1此比较,但是只进行了一次交换。在下一趟排序中,所做的事情一模一样,只是要完全忽略最左边队员的存在,因为他已经排序了。因此算法的第二趟排序从位置1而不是位置0开始,没进行完一次排序,就多一个队员有序,并被安排在左边,下次再找新的最小值时就可以少考虑一个队员

public void selectionSort(){
    int out,in,min;
    for(out=0;out<nElems-1;out++){
        min=out;
        for(in=out+1;in<nElems;in++){
            if(a[in]<a[min]){
                min=in;
            }
        }
        swap(out,min)
    }
}

外层循环用循环变量out,从数组开头开始向高位增长。内层循环用循环变量in,从out所指位置开始,同样是向右移位,每一个in的新位置,数据项a[in]和a[min]进行比较,如果a[in]更小,则min被赋值为in的值,在内层循环的最后,min指向最小的数据项,然后交换out和min指向的数据数据项

相关文章

  • 3.1-选择排序-简单选择排序

    参考链接 选择排序:简单选择排序(Simple Selection Sort) 白话经典算法系列之四 直接选择排序...

  • 算法理解之排序-选择排序

    算法理解之排序-选择排序 选择排序是一种简单直观的排序算法, 以当前点为锚点, 向后依次进行比较所有未排序元素, ...

  • 常用排序算法(Python实现), 持续更新中

    一、非线性时间比较类排序 交换排序冒泡排序快速排序 插入排序简单插入排序希尔排序 选择排序简单选择排序堆排序 归并...

  • 选择排序-c语言描述

    选择排序分简单选择排序与堆排序两种,先介绍简单选择排序。1.简单选择排序在未排序的序列中找到最小(大)元素,存放到...

  • 基础算法|简单选择排序

    简单选择排序是一种排序算法,指在简单选择排序过程中,所需移动记录的次数比较少。简单选择排序是不稳定排序。 简单选择...

  • 给自己备份的排序代码

    交换排序 冒泡排序 快速排序 插入排序 直接插入排序 希尔排序 选择排序 简单选择排序 堆排序

  • 排序法

    排序分 内部排序和外部排序 内部排序: 插入排序:{直接插入排序,希尔排序} 选择排序:{简单选择排序,堆排序} ...

  • 算法与数据结构知识汇总(八、常见的八大排序算法)

    排序技术有:插入排序(直接插入排序、希尔排序)、选择排序(简单选择排序、堆排序)、交换排序(冒泡排序、快速排序)、...

  • 排序算法

    排序算法 非线性时间比较类排序 交换排序 冒泡排序 快速排序 插入排序 插入排序 希尔排序 选择排序 简单选择排序...

  • 八大排序算法

    插入排序:直接插入排序, 希尔排序选择排序:简单选择排序, 堆排序交换排序:冒泡排序,快速排序归并排序基数排序 插...

网友评论

      本文标题:简单排序之选择排序

      本文链接:https://www.haomeiwen.com/subject/ubqnultx.html