选择排序--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<j 内层循环临时变量为k 这是一个用于和min指针以及max指针分别进行比较的变量
    while i < j:
        # 重置min和max指针
        minIndex = i
        maxIndex = j
        for k in range(i, j + 1):
            # 如果当前k指针数小于min指针数的话 那么就要更新min
            if arr[k] < arr[minIndex]:
                minIndex = k
            # 如果当前k指针数大于max指针数的话 那么就要更新max
            if arr[k] > 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实现选择排序详解 如果存在不对的地方 请多指教!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

axihaihai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值