zoukankan      html  css  js  c++  java
  • 数据结构之内部排序--简单选择排序

    概要

    -IDE:Pycharm
    -Python版本:python3.x
    -算法分类:内部排序->选择类排序->简单选择排序

    算法思想

    第一趟简单选择排序时,从第一个记录开始,通过$n-1$次关键字比较,从$n$个记录中选出关键字最小的记录,并和第一个记录进行交换。
    第二趟,从第二个记录开始,通过$n-2$次比较,选出最小的与第二个记录交换。
    反复如此,经过$n-1$次简单选择排序,将把$n-1$个记录排到位,剩下的一个最小记录直接在最后,所以共需进行$n-1$趟简单选择排序。

    算法分析

    最好情况下,即待排序记录初始状态是正序,则不需要移动记录,最坏情况是倒序,此时移动的最多为$3(n-1)$次。
    简单选择排序过程中需要进行的比较次数与初始状态无关,总共需要比较$sum_{i=1}^{n-1}=(n-1)+(n-2)+...+1= frac{n(n-1)}{2}$

    稳定性与时间复杂度

    排序算法 稳定性 时间复杂度 最好情况 最坏情况 空间复杂度
    简单选择 不稳定 $O(n^2)$ $O(n^2)$ $O(n^2)$ $O(1)$

    Python代码清单

    # !/usr/bin/python3
    # _*_ coding:utf-8 _*_
    # 选择排序。
    
    import sys, time, random
    
    
    def SS(number, maxNumber):
        timeStart = time.time()  # 记录开始时间。
        listA = []  # 设置list容器
        for i in range(number):  # 循环生成列表元素
            listA.append(random.randint(0, maxNumber))  # 添加到列表
    
        timeEnd = time.time()  # 记录结束时间
        tiemIs = timeEnd-timeStart  # 计算耗时
        print('生成%d个数花费的时间是%f' % (number, tiemIs))  # 打印信息。
        # print(listA)  # 打印生成的列表。
        ############################################################
        # 快速排序。
        # aim = 0  # aim 用于存储找到的最小值。
        timeStart = time.time()  # 记录开始时间。
        for item in range(number-1):  # 外层循环,
            i = item  # 记录当前元素位置,也是目标位置,也是第一个比较元素。
            temp = listA[i]  # 记录当前元素的值
            for item2 in range(item+1, number):  # 内层循环。
                if listA[item2] < listA[i]:  # 判断的大小。
                    i = item2  # 更新比较元素。
            listA[item] = listA[i]  # 将最小的元素放到目标位
            listA[i] = temp  # 将目标位的元素送到当前位。
            # print(listA[item])
        timeEnd = time.time()  # 记录结束时间。
        timeIs = timeEnd - timeStart  # 计算消耗时间。
        print('排序%d个数花费的时间是%f' % (number, timeIs))  # 打印输出相关信息。
        # print(listA)  # 打印输出列表。
    
    
    if __name__ == '__main__':
    
        helpInfo = '''
            This program is for Select Sort.
            How to use it! Follow the example!
    
            python Select_Sort.py 10 100
    
            The 10 representative will generate ten numbers.
            100 representative the max-number you make.
            
        '''
        command = sys.argv[0:]  # 从键盘上获取输入。
        if len(command) != 3 or 'help' in command:  # 判断输入是否合法,或者有请求帮助的词。
            print(helpInfo)  # 打印帮助语句。
        else:
            try:
                number = int(command[1])  # 尝试将字符转化为int型数值。
                maxNumber = int(command[2])
            except ValueError:  # 转化失败,发生ValueError。
                print(helpInfo)  # 打印帮助文本。
                sys.exit(1)  # 以异常的方式退出程序
            SS(number, maxNumber)  # 一切正常,开始调用函数。
    
    
    

    有什么问题请联系我

    QQ:3116316431 (请附上信息)
    E-mail:wongyinlong@yeah.net

  • 相关阅读:
    oracle数据库sql中文乱码问题,字符编码环境变量
    oracle数据库序列自增id
    上线注意事项
    impdp 导出导入注意事项
    linux 上不同用户权限问题
    plsql 工具命令窗口执行sql脚本问题
    oracle创建用户
    Redis会遇到的15个坑
    JavaScript的标准库
    JavaScript的运算符
  • 原文地址:https://www.cnblogs.com/Leon-The-Professional/p/9950093.html
Copyright © 2011-2022 走看看