zoukankan      html  css  js  c++  java
  • 【每日算法】选择排序算法之直接选择排序

    1)算法简介

    选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下:

    • 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置;
    • 然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
    • 以此类推,直到所有元素均排序完毕。

    2)算法描述和分析

    n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:

    1、初始状态:无序区为R[1..n],有序区为空。

    2、第i趟排序(i=1,2,3...n-1)

    第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

    3、前n-1趟结束,数组有序化了

    选择排序的交换操作介于0和(n-1)次之间。选择排序的比较操作为n(n-1)/2次之间。选择排序的赋值操作介于0和3(n-1)次之间。比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(n-1)/2。 交换次数O(n),最好情况是,已经有序,交换0次;最坏情况是,逆序,交换n-1次。 交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。

    最差时间复杂度 О(n²)
    最优时间复杂度 О(n²)
    平均时间复杂度 О(n²)
    最差空间复杂度 О(n) total, O(1)

    3)算法图解、flash演示、视频演示

    图解:

    选择排序-图解

    Flash:
    http://ds.fzu.edu.cn/fine/resources/FlashContent.asp?id=85
    视频:选择排序Select Sort排序舞蹈
    http://v.youku.com/v_show/id_XMjU4NTY5NTcy.html

    4)算法代码

    void selection_sort(int *a, int len)  
    {  
        register int i, j, min, t;  
        for(i = 0; i < len - 1; i ++)  
        {  
            min = i;  
            //查找最小值  
            for(j = i + 1; j < len; j ++)  
                if(a[min] > a[j])  
                    min = j;  
            //交换  
            if(min != i)  
            {  
                t = a[min];  
                a[min] = a[i];  
                a[i] = t;  
            }  
        }  
    }  
    

    5)考察点,重点和频度分析

    就博主看过的笔试面试题而言,选择算法也大多出现在选择填空中,要熟悉其时间和空间复杂度,最好最坏的情况分别是什么,以及在那种情况下,每一轮的比较次数等。

    6)笔试面试例题

    例题1、在插入和选择排序中,若初始数据基本正序,则选用 插入排序(到尾部) ;若初始数据基本反序,则选用 选择排序

    例题2、 下述几种排序方法中,平均查找长度(ASL)最小的是
    A. 插入排序 B.快速排序 C. 归并排序 D. 选择排序

  • 相关阅读:
    JAVA学习日报 11/26
    JAVA学习日报 11/25
    大二寒假作业之JavaWeb
    大二寒假作业之JavaWeb
    大二寒假作业之JavaWeb
    大二寒假作业之《构建之法》读后感2
    大二寒假作业之Android
    大二寒假作业之《构建之法》读后感1
    大二寒假作业之android
    大二寒假作之Android
  • 原文地址:https://www.cnblogs.com/shih/p/6637672.html
Copyright © 2011-2022 走看看