• 选择排序--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实现选择排序详解 如果存在不对的地方 请多指教!!

  • 相关阅读:
    使用Tomcat搭建一个Servlet项目
    类型转换(2)
    奖品定制经营商城小程序的作用是什么
    【 失踪人口回归】新·学期
    关于反向竞价的6个常见误解,采购一定要知道
    一篇文章让你熟悉unordered_set及其模拟实现
    DevicData-D-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
    C++ day4
    Java面试八股文宝典:初识数据结构-数组的应用扩展之HashTable
    企业为什么要上OA?
  • 原文地址:https://blog.csdn.net/m0_71299382/article/details/128046285