目录

选择排序

基本思想

性能特点

步骤详解

python代码


选择排序

        选择排序是一种十分基础的的排序算法,比较简单直观。当对数据量较少的序列实现升序或降序排序是可以采用选择排序。

基本思想

        从头到尾扫描所有的n个元素,从中找出最小或最大的元素并和第一个元素进行交换,然后从除第一个以外的n-1个元素中扫描,找出最小或最大的元素并和第一个(n-1个中)元素进行交换,不断迭代此操作剩下的元素,最终就是一个有序的序列。

python编程实现选择排序算法 选择排序代码python_python

性能特点

平均时间复杂度

最好情况

最坏情况

空间复杂度

排序方式

稳定性

python编程实现选择排序算法 选择排序代码python_排序算法_02

python编程实现选择排序算法 选择排序代码python_排序算法_02

python编程实现选择排序算法 选择排序代码python_排序算法_02

python编程实现选择排序算法 选择排序代码python_python编程实现选择排序算法_05

In-place

不稳定

步骤详解

待排序列:1,42,65,876,34,656,4

1

42

65

876

34

656

4

升序排序 

第一趟排序:待排序列中1为最小元素,且1本来就在最小元素位置,则不发生元素交换。

已经有序{},剩下待排序序列{1,42,65,876,34,656,4}

min

扫描

1

42

65

876

34

656

4

排序

1

42

65

876

34

656

4

第二趟排序:剩下待排序列中4为最小元素,则把4交换到最小元素位置上。

已经有序{1},剩下待排序序列{42,65,876,34,656,4}

min

扫描

1

42

65

876

34

656

4

排序

1

4

65

876

34

656

42

第三趟排序:剩下待排序列中34为最小元素,则把34交换到最小元素位置上。

已经有序{1,4},剩下待排序序列{65,876,34,656,42}

min

扫描

1

4

65

876

34

656

42

排序

1

4

34

876

65

656

42

第四趟排序:剩下待排序列中42为最小元素,则把42交换到最小元素位置上。

已经有序{1,4,34},剩下待排序序列{876,65,656,42}

min

扫描

1

4

34

876

65

656

42

排序

1

4

34

42

65

656

876

第五趟排序:剩下待排序列中65为最小元素,且65本来就在最小元素位置,则不发生元素交换。

已经有序{1,4,34,42},剩下待排序序列{65,656,876}

min

扫描

1

4

34

42

65

656

876

排序

1

4

34

42

65

656

876

第六趟排序:剩下待排序列中656为最小元素,且656本来就在最小元素位置,则不发生元素交换。已经有序{1,4,34,42,65},剩下待排序序列{656,876}

min

扫描

1

4

34

42

65

656

876

排序

1

4

34

42

65

656

876

有序序列:待排元素只剩下一个,则整个序列已经是有序序列了。

已经有序{1,4,34,42,65,656},剩下待排序序列{876},此时整个序列已经有序{1,4,34,42,65,656,876}

1

4

34

42

65

656

876

python代码

升序

# 选择排序
def selectionSort(arr):
    for i in range(len(arr) - 1):
        minIndex = i  # 记录最小元素的索引
        # 找出最小元素
        for j in range(i + 1, len(arr)):  
            if arr[j] < arr[minIndex]:
                minIndex = j
        # i不是最小元素时,将i和最小元素进行交换
        if i != minIndex:
            arr[i], arr[minIndex] = arr[minIndex], arr[i]
    return arr


if __name__=="__main__":
    nums = [1, 42, 65, 876, 34, 656, 4, 6757, 89, 24, 65, 42]
    print("start:", nums)
    print("冒泡 :", selectionSort(nums))

降序

# 选择排序
def selectionSort(arr):
    for i in range(len(arr) - 1):
        maxIndex = i  # 记录最大元素的索引
        # 找出最大元素
        for j in range(i + 1, len(arr)):
            if arr[j] > arr[maxIndex]:
                maxIndex= j
        # i不是最大元素时,将i和最大元素进行交换
        if i != maxIndex:
            arr[i], arr[maxIndex] = arr[maxIndex], arr[i]
    return arr


if __name__=="__main__":
    nums = [1, 42, 65, 876, 34, 656, 4, 6757, 89, 24, 65, 42]
    print("start:", nums)
    print("冒泡 :", selectionSort(nums))