算法分析
时间复杂度:O(n²)
空间复杂度:O(1)
算法特点
就选择排序本身来讲,它是一种稳定的排序算法
可用于链式存储结构
移动记录次数较少,当每一记录占用的空间较多时,此方法比直接插入排序快
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 10010; //定义数组长度
void Select_sort(int arr[], int n); //声明简单选择排序函数
void Swap(int *a, int *b); //声明值交换函数
int main()
{
int n; cin >> n; //输入需要待排序的数字个数
int arr[N]; //定义数组
for(int i = 0; i < n; i++) cin >> arr[i]; //输入排序前的数组
Select_sort(arr, n); //进行简单选择排序
for(int i = 0; i < n; i++) cout << arr[i] << " "; //输出排序后的数组
return 0;
}
//定义简单选择排序函数,参数为数组arr[],数组长度n
void Select_sort(int arr[], int n)
{
int index; //定义移动下标index
for(int i = 0; i < n; i++) //外循环从前往后排序,数组从前往后确定
{
index = i; //初始化移动下标指向arr[i]
//内循环遍历arr[i]后面的数字,一旦有比arr[i]小的值就令index指向它
for(int j = i+1; j < n; j++) if(arr[index] > arr[j]) index = j;
//当index不指向arr[i]时说明后面有比arr[i]小的数,则交换arr[i]和arr[index]的位置
if(index != i) Swap(&arr[i], &arr[index]);
}
}
//定义值交换函数
void Swap(int *a, int *b)
{
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
欢迎大家探讨