选择排序
原理:
通过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语言中第一个接触的算法。