首页 > 其他分享 >【模版】选择排序

【模版】选择排序

时间:2023-12-20 20:00:31浏览次数:27  
标签:arr min int 模版 复杂度 len 选择 排序

选择排序(Selection sort)是一种简单直观的排序算法。

1. 基本思想

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

选择排序的思想其实和冒泡排序有点类似,都是在一次排序后把最小的元素放到最前面,或者将最大值放在最后面。但是过程不同,冒泡排序是通过相邻的比较和交换。而选择排序是通过对整体的选择,每一趟从前往后查找出无序区最小值,将最小值交换至无序区最前面的位置。

代码实现如下:

void selection_sort(int arr[], int len) {
    int i, j, min;
    for (i = 0; i < len - 1; i++) {
        min = i;
        for (j = i + 1; j < len; j++)
            if (arr[min] > arr[j])
                min = j;
        
        swap(arr[i], arr[min]);
    }
}

算法复杂度分析:

平均时间复杂度:O(N^2)
最佳时间复杂度:O(N^2)
最差时间复杂度:O(N^2)
空间复杂度:O(1)

 

图解:

 

标签:arr,min,int,模版,复杂度,len,选择,排序
From: https://www.cnblogs.com/Yukie/p/17917369.html

相关文章

  • 【模版】计数排序
    引入:P1271【深基9.例1】选举学生会在实际中,一般会在投票区放n个投票箱,投完后只需要计数每个投票箱即可。就此可引入计数排序。本题AC代码(虽然这题直接sort就行了...)#include<iostream>usingnamespacestd;inta[1010]={0},n,m,tmp;intmain(){cin>>n>>m;for......
  • 选择
    计算机网络选择题题库(PDY整理)第一章测试ANETWORKADMINISTRATORISIMPLEMENTINGAPOLICYTHATREQUIRESSTRONG,COMPLEXPASSWORDS.WHICHDATAPROTECTIONGOALDOESTHISPOLICYSUPPORT?A、dataqualityB、dataredundancyC、dataintegrityD、dataconfidentiality......
  • uniapp app安卓、ios文件选择 (上传pdf word video img )等
    1、hybrid 必须放在项目根目录下,不然会调用失效:如图 2、建立nvue 子窗体  代码:1<template>2<viewclass="nvue">3<textclass="popup-item"@click="clickfun">选择文件</text>4<textclass="ddddd......
  • 【模版】归并排序
    归并排序,它有两大核心操作.一个是将数组一分为二,一个无序的数组成为两个数组。另外一个操作就是,合二为一,将两个有序数组合并成为一个有序数组。时间复杂度情况:最好和最快情况都是:O(NlogN)代码模版如下intarr[N],temp[N];voidmerge_sort(intarr[],intl,intr......
  • 【模版】快速排序
    快速排序基本思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。算法复杂度最差时间复杂度O(N2)平均时间复杂度O(Nl......
  • 桶排序
    桶排序计数排序&基数排序思路来源一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到笔记内容特点:不基于比较的排序算法思路计数排序申明一个定长数组,遍历数据并在对应数值的下标频率统计加一,最后根据频率数组进行输出。待排序的数据必须有范围......
  • [LeetCode] LeetCode81. 搜索旋转排序数组II
    题目描述思路:是lc33.搜索旋转排序数组的延伸,允许包含重复元素起初:当nums[left]<=nums[mid]时,区间[left,mid]有序当nums[left]>nums[mid]时,区间[mid,right]有序但是这个题目当nums[left]==nums[mid]时,无法判断哪个区间是有序的,无法判断target位于左侧还是右侧,此时无......
  • [LeetCode Hot 100] LeetCode153. 寻找旋转排序数组中的最小值
    题目描述思路如果数组翻转后又回到升序的情况,即nums[left]<=nums[right],则nums[left]就是最小值,直接返回。如果数组翻转,需要找到数组中第二部分的第一个元素:若nums[left]<=nums[mid],说明区间[left,mid]连续递增,则最小元素一定不在这个区间里,可以直接排除,最小值在[......
  • 消息中间件的选择:RabbitMQ是一个明智的选择
    ......
  • 912. 排序数组---快速排序
    1.题目介绍给你一个整数数组 \(nums\),请你将该数组升序排列。示例1:输入:nums=[5,2,3,1]输出:[1,2,3,5]示例2:输入:nums=[5,1,1,2,0,0]输出:[0,0,1,1,2,5]提示:\(1<=nums.length<=5*10^{4}\)\(-5*10^{4}<=nums[i]<=5*10^{4}\)2.题解2.1随机化快速排......