LeetcodeDaily_Day2 选择排序select_sort(Python实现)

LeetcodeDaily_Day2 选择排序select_sort(Python实现)

  • 基本选择排序
def select_sort(nums):
    n, compareCount = len(nums), 0
    for i in range(n):
        for j in range(i+1, n):
            compareCount += 1
            if nums[j] < nums[i]:
                nums[i], nums[j] = nums[j], nums[i]
    print("总比较次数", compareCount)
    return nums
  • 改进1-比较厚记录最小值序号只做一次交换
def select_sort_2(nums):
    n, compareCount = len(nums), 0
    for i in range(n):
        minValueIndex = i
        for j in range(i+1, n):
            compareCount += 1
            if nums[j] < nums[minValueIndex]:
                minValueIndex = j       
        if(minValueIndex != i):
            nums[i], nums[minValueIndex] = nums[minValueIndex], nums[i]
    print("总比较次数", compareCount)
    return nums
  • 改进2-二元选择排序
    每次记录最大最小值两个元素,减少比较的次数
def select_sort_3(nums):
    n, compareCount = len(nums), 0
    for i in range(n//2):
        minValueIndex, maxValueIndex = i, n-i-1
        for j in range(i, n-i):
            if nums[maxValueIndex] < nums[j]:
                # compareCount += 1
                maxValueIndex = j
            if nums[j] < nums[minValueIndex]:
                # compareCount += 1
                minValueIndex = j
        if maxValueIndex==i and minValueIndex==n-i-1:
            nums[maxValueIndex], nums[minValueIndex] = nums[minValueIndex], nums[maxValueIndex]
        elif maxValueIndex == i:
            nums[n-i-1], nums[maxValueIndex] = nums[maxValueIndex], nums[n-i-1]
            nums[i], nums[minValueIndex] = nums[minValueIndex], nums[i]
        elif minValueIndex==n-i-1:
            nums[i], nums[minValueIndex] = nums[minValueIndex], nums[i]
            nums[n-i-1], nums[maxValueIndex] = nums[maxValueIndex], nums[n-i-1]
        else:
            nums[i], nums[minValueIndex] = nums[minValueIndex], nums[i]
            nums[n-i-1], nums[maxValueIndex] = nums[maxValueIndex], nums[n-i-1]
    print("总比较次数", compareCount)
    return nums

说明:选择排序每次将最小数排到首位,从前往后,最终保证最后元素为最大值
时间复杂度:O(n^2)

你可能感兴趣的:(数据结构与算法)