美文网首页随便写写
Python-选择排序

Python-选择排序

作者: MasterXiao | 来源:发表于2019-01-23 23:54 被阅读0次

选择排序算法

选择排序虽然是效率不是很高的排序算法,不过它在我们编程的时候还是会经常使用,出场次数有时候可能要比效率更高的那些算法更高。

首先咱们通过一个动图来了解选择排序的过程:

5863482636c750d9e5cb683374fba9d4.gif

通过这个动图,我们可以发现选择排序的过程为:每次一轮遍历都找到当前最小的元素并和未排序元素的第一个元素交换位置。

接下来编写代码:


def sort(arr):
    for j in range(len(arr)-1):    
        minIndex = j
        for i in range(j+1,len(arr),1):
            if(arr[i] < arr[minIndex]):
                minIndex = i
        arr[j],arr[minIndex] = arr[minIndex],arr[j]

def main():
    arr = [3,1,2,4,6,7,8,9,5]
    sort(arr)
    print(arr)

if __name__ == "__main__":
    main()
    pass

执行会输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

使用随机数生成测试用例

通过上面我们已经掌握了选择排序代码的编写了,不过我们会发现,上面代码的测试数组太简单了,只有1-9,这么一段数据集太少了并不能测试我们编写的排序算法到底靠不靠谱。

那如何才能靠谱呢?

你应该已经想到了:加大测试集,增加测试次数,是的,没错,当我们数据量大,测试集非常多的时候这段程序如果依然能正确的进行排序,那我们就可以判断它是一个正确的排序算法了。

好了,问题来了,如何才能生成大量的数据集(比如说一万条)呢?

手写肯定是不行,所以咱们需要通过程序帮我们生成,接下来我们分两步完成生成随机测试用例并测试。

  1. 使用随机数生成大量测试集;
  2. 测试程序是否已经是排好序的状态。
第一步:随机生成1万条测试用例

使用random模块我们就可以生成随机数了
利用random模块的random.randint(a,b)方法就可以生成从ab的随机数。
编写代码:

import random
def getRandomArr(num):
    arr = []
    for i in range(num):
        arr.append(random.randint(0,num))
    return arr

这段代码可以生成num个从0num的随机数。

第二部:测试代码编写

接下来我们需要编写一个函数检测数组是否已经是排好序的。

def isSorted(arr):
    for i in range(len(arr)-1):
        if arr[i] > arr[i+1]:
            return False
    return True

完整代码:


import random

def sort(arr):
    for j in range(len(arr)-1):    
        minIndex = j
        for i in range(j+1,len(arr),1):
            if(arr[i] < arr[minIndex]):
                minIndex = i
        arr[j],arr[minIndex] = arr[minIndex],arr[j]

def main():
    arr = getRandomArr(10000)  #测试一万条数据
    sort(arr)
    
    print(isSorted(arr))#检测是否排好序

#获取随机数
def getRandomArr(num):
    arr = []
    for i in range(num):
        arr.append(random.randint(0,num))
    return arr

#检测是否已排序
def isSorted(arr):
    for i in range(len(arr)-1):
        if arr[i] > arr[i+1]:
            return False
    return True


if __name__ == "__main__":
    main()
    pass

这样子我们就完成了一个选择排序的编写与测试啦。

绘图查看选择排序的算法执行效率

还不想这么早结束,咱们在执行代码的时候发现当测试集数据量非常大的时候我们的程序非常慢,其实选择排序算是一种效率较低的排序算法,它的代码执行效率为:O(n^2)

相关文章

  • Python-选择排序

  • Python-选择排序

    选择排序算法 选择排序虽然是效率不是很高的排序算法,不过它在我们编程的时候还是会经常使用,出场次数有时候可能要比效...

  • Python-排序-选择排序-优化

    以下是本人学习极客时间的专栏《数据结构与算法之美》后,自己动手敲代码实现,并写下当时的思考,希望对你也有帮助。系列...

  • 为什么归并排序分两组进行而不是更多?

    归并排序想必大家都不陌生,我之前在学习算法的时候也分享过,见前文Python-排序-归并排序中如何用哨兵来追求极致...

  • Python-排序-冒泡排序-优化

    这是我通过极客专栏《数据结构与算法之美》学习后的思考,分享一下,希望对你有所帮助。上一篇文章 工作后,为什么还要学...

  • Python-冒泡排序

    冒泡排序 #两两交换#选出最值到右边#外层循环控制继续交换的范围,最值不参与交换#内层循环使用ls[j]和它旁边的...

  • Python-冒泡排序

    一、基本原理 1.概念:冒泡排序(Bubble Sort),是一种计算机领域的较简单的排序算法。它重复地走访过要排...

  • 算法-选择排序

    算 法:选择排序算法时间复杂度: 选择排序算法概述 选择排序伪代码 选择排序实现 选择排序算法概述 排序算法有许...

  • 常见排序算法

    这里介绍四种排序算法,选择排序、快速排序、归并排序、计数排序 选择排序(使用递归) 选择排序(使用循环) 快速排序...

  • python-冒泡排序-选择排序-插入排序-快速排序-二分查找

    1、冒泡排序 - 实现列表[5, 3, 4, 7, 2]排序: 冒泡排序运行结果: 2、选择排序 - 实现列表[1...

网友评论

    本文标题:Python-选择排序

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