对于原始数组 [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循环 条件判断语句为iarr[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实现选择排序详解 如果存在不对的地方 请多指教!!