基础算法-简单选择排序

算法分析

  • 时间复杂度: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;
}

欢迎大家探讨

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值