数据结构笔记-简单排序-选择排序算法

157 阅读1分钟

选择排序

原理:

通过N-1遍遍历数组/列表来获取待排序数据中的最大/最小数字并将其交换放在待排序数据的最左端

时间复杂度:

O(N²)

空间复杂度:

O(1)

代码实现(Python,Java,C):

Python:

def main():
   data = [11, 22, 1, 99, 58, 64, 78, 156, 178]
   for i in range(len(data)-1):
       index = i
       for j in range(i+1, len(data)):
           if data[j] < data[index]:
               index = j
       temp = data[index]
       data[index] = data[i]
       data[i] = temp
   print(data)
   pass


if __name__ == "__main__":
   	main()

Java:

public class SelectionSortTest
{
    // final指向对象不可变,但对象值可变
    // int[]不属于基本数据类型,属于实例化对象,所以值可变

    public static void main(String[] args)
    {
        int[] data = {11, 22, 1, 99, 58, 64, 78, 156, 178};
        //基本数据类型传值,对象传地址
        selectionSort(data);
        for (int datum : data)
            System.out.println(datum);
    }

    public static void selectionSort(int[] data)
    {
        int index, temp;    // 定义索引和临时数
        // 共进行N-1遍操作
        for(int i = 0; i < data.length - 1; i++)
        {
            index = i;
            // 遍历列表,获取索引
            for(int j = i + 1; j < data.length; j++)
                if (data[j] < data[index])
                    index = j;
            // 交换数据
            temp = data[index];
            data[index] = data[i];
            data[i] = temp;
        }
    }
}

C:

#include <stdio.h>
#define N 9


int main() {
    int data[N] = {11, 22, 1, 99, 58, 64, 78, 156, 178};
    int index, temp;

    for(int i = 0; i < N - 1; i++)
    {
        index = i;
        for(int j = i + 1; j < N; j++)
            if (data[j] < data[index])
                index = j;

        temp = data[index];
        data[index] = data[i];
        data[i] = temp;
    }

    for (int i = 0; i < N; ++i)
        printf("%d   ", data[i]);
}

总结

最简单的排序算法之一,一般也都是学习C语言中第一个接触的算法。