• 选择排序--python(详解)


    对于原始数组 [4, 6, 3, 9]而言:

    首先要有的指针如下所示:

    i--每次比较时相对靠前的元素

    j--每次比较时相对靠后的元素

    m--每次比较时较小的元素

    具体过程如下图所示:

     

    代码实现如下:

    # 首先定义一个函数 用于对无序数组进行选择排序 以得到一个升序排序的数组 接收一个参数 即数组
    def selectSort(arr):
        # 定义两层循环 外层循环临时变量为两数比较中的相对靠前的数 内层循环临时变量为两数比较中相对靠后的数
        for i in range(len(arr) - 1):
            # 重置m指针
            m = i
            for j in range(i + 1, len(arr)):
                # 如果说j指针数小于m指针数的话 那么更新m指针
                if arr[j] < arr[m]:
                    m = j
            # 当内层循环完毕后 交换m指针数和i指针数
            swap(arr, i, m)
    # 定义一个函数 用于交换两个数
    def swap(arr, index1, index2):
        temp = arr[index1]
        arr[index1] = arr[index2]
        arr[index2] = temp
    if __name__ == "__main__":
        # 定义一个数组
        arr = [3, 6, 4, 9]
        # 打印排序前的数组
        print(arr)
        # 对数组进行选择排序
        selectSort(arr)
        # 打印排序后的数组
        print(arr)

    然后其实上选择排序还有优化的地步 上述代码只是每轮进行一次比较而已 但是我们还可以在这个次数上做文章

    上述代码只不过是在做左边设置了一个指针而已 我们可以左右两边各设置一个指针 这样效率就提高了不少 具体如

    下图所示:

     

    接着优化后的代码实现如下:

    # 这是一个优化后的选择排序案例
    # 首先定义一个函数 用于对无序数组进行选择排序 接收一个参数 即原始数组
    def selectSortOptimization(arr):
        # 初始化五个指针
        i = 0
        j = len(arr) - 1
        k = 0
        minIndex = 0
        maxIndex = 0
        # 定义一个嵌套循环 外层为while循环 条件判断语句为i arr[maxIndex]:
                    maxIndex = k
            # for循环完毕以后 需要交换一下min指针数和i指针数 以及max指针数和j指针数
            temp = arr[j]
            arr[j] = arr[maxIndex]
            arr[maxIndex] = temp
            # 如果遇到min指针和j指针重合后交换了max指针数和j指针数这种情况的话 那么就要重置min指针数
            if minIndex == j:
                minIndex = maxIndex
            # 接下来才可以进行min和i之间的交换
            temp = arr[i]
            arr[i] = arr[minIndex]
            arr[minIndex] = temp
            # 然后最后还要进行条件控制语句的书写
            i+=1
            j-=1
    if __name__ == "__main__":
        # 定义一个数组
        arr = [3, 6, 4, 9]
        # 打印排序前的数组
        print(arr)
        # 对无序数组进行选择排序
        selectSortOptimization(arr)
        # 打印排序后的数组
        print(arr)

    这就是我编写的通过python实现选择排序详解 如果存在不对的地方 请多指教!!

  • 相关阅读:
    composer 扩展库。助手库文档
    网站服务器该怎么选择呢?
    Java:Java虚拟机中垃圾收集器的类型
    jsp4S店管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
    c#中适配器模式详解
    mysql中的四大运算符种类汇总20多项,用了三天三夜来整理的,还不赶快收藏
    day44
    向日葵资深产品总监技术分享:“国民远控”如何在AD域环境下应用
    合工大《数字媒体技术》课程调研报告-视频伪造
    【译】使用 .NET Aspire 和 Visual Studio 开发云原生应用
  • 原文地址:https://blog.csdn.net/m0_71299382/article/details/128046285