1,原理定义
它的基本思想是:第一次从 数组中选取最小值,与arr[0]交换,第二次从剩余的数中选取最小值,与arr[1]|交换,以此类推,得到一个按排序码从小到大排列的有序序列。
优点是数据移动次数减少。
2,原理图片展示
3,代码实现
C++ 代码实现如下:
// SimpleSelect.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
//测试数组 正确顺序维 2,3,7,12,15,31,34,45,54,64,86
int data[] = { 12,45,2,64,54,31,86,34,15,3,7 };
void simpleSelect(int data[], int count) {
for (int i = 0; i < count; i++)
{
int tem = data[count - 1];
int index = count - 1;
for (int j = count - 2; j >=i; j--)
{
if (tem > data[j]) {
tem = data[j];
index = j;
}
}
data[index] = data[i];
data[i] = tem;
std::cout << "第"<<i+1<<"次排列: ";
for (int i = 0; i <11; i++) {
std::cout << data[i] << " ";
}
std::cout << " " << std::endl;
}
}
int main()
{
std::cout << "原始数据 " << " ";
for (int i = 0; i <11; i++) {
std::cout << data[i] << " ";
}
std::cout << " " << std::endl;
simpleSelect(data, 11);
std::cout << "排序数据 " << " ";
for (int i = 0; i <11; i++) {
std::cout << data[i] << " ";
}
std::cout << " " << std::endl;
system("echo 按回车继续...&pause>nul");
return 0;
}
运行结果:
4,时间复杂度和空间复杂度
时间复杂度 O(n²),空间复杂度O(1)
5,是否稳定
稳定