十大排序算法之选择排序

目录

​编辑

前言

十大排序算法包括哪些

选择排序原理

选择排序基本信息 

代码实现

代码思路

代码实现

实例

【模板】排序

代码

总结

基本思想

算法步骤

时间复杂度与空间复杂度


前言

排序是重要又较为简单的算法之一,个人认为学习算法建议先学习排序,排序有十种重要的排序方法,有些好,有些坏。

十大排序算法包括哪些

十大排序算法包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序。

今天我来讲讲选择排序。

选择排序原理

选择排序是一种简单直观的排序算法,其工作原理是通过每一趟从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)元素,放到已排序序列的末尾,以此类推,直到全部待排序的数据元素排完。

选择排序基本信息 

英文名selection sort
时间复杂度O(n^2)
空间复杂度O(1)
是否稳定

代码实现

代码思路

首先需要一个标志变量minid = i。

接着从minid+1开始遍历整个数组。

如果发现有有比a[minid]还小的数,那么就将minid设置成j。

在遍历完之后,记得把a[i]和a[minid]交换一下哦~

代码实现

/*头文件部分*/
#include <iostream>
#include <algorithm>
using namespace std;
/*选择排序部分*/
void Selection_sort() {
	int a[100001], n;
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	for (int i = 1; i <= n; i++) {
		int minid = i;
		for (int j = i + 1; j <= n; j++)
			if (a[j] < a[minid])
				minid = j;
		int t = a[i];
		a[i] = a[minid];
		a[minid] = t;
	}
	/*输出数组部分*/
	for (int i = 1; i <= n; i++)
		cout << "第" << i << "个数:" << a[i] << endl;
}
/*主函数部分*/
int main() {
	Selection_sort();
	return 0;
}

实例

【模板】排序

题目描述

将读入的 N 个数从小到大排序后输出。

输入格式

第一行为一个正整数 N。

第二行包含 N 个空格隔开的正整数 ai,为你需要进行排序的数。

输出格式

将给定的 N 个数从小到大输出,数之间空格隔开,行末换行且无空格。

样例1

样例输入1
5
4 2 4 5 1

样例输出1
1 2 4 4 5

本题来自洛谷题目P1177 【模板】排序icon-default.png?t=O83Ahttps://www.luogu.com.cn/problem/P1177

代码

#include <iostream>
#include <algorithm>
using namespace std;
void Selection_sort() {
	int a[100001], n;
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	for (int i = 1; i <= n; i++) {
		int minid = i;
		for (int j = i + 1; j <= n; j++)
			if (a[j] < a[minid])
				minid = j;
		int t = a[i];
		a[i] = a[minid];
		a[minid] = t;
	}
	for (int i = 1; i <= n; i++)
		cout << a[i] << " ";
	cout << endl;
}
int main() {
	Selection_sort();
	return 0;
}

总结

选择排序(Selection Sort)‌是一种简单直观的排序算法,其基本思想是通过多次遍历数组,每次找出剩余未排序部分的最小(或最大)元素,将其放到已排序序列的起始位置,直到整个序列排序完成。

基本思想

选择排序的基本思想是:

  1. 多趟选择‌:通过n-1趟选择操作,每趟从剩余未排序的元素中找到最小(或最大)的元素,然后将其放到已排序序列的末尾。
  2. 逐步排序‌:每趟选择后,已排序的元素序列逐步增长,未排序的元素序列逐步减少。

算法步骤

  1. 初始化‌:将第一个元素设为最小值。
  2. 遍历‌:遍历剩余的元素,找到最小(或最大)的元素。
  3. 交换‌:将找到的最小(或最大)元素与第一个位置的元素交换。
  4. 重复‌:重复上述步骤,直到整个列表排序完成。

时间复杂度与空间复杂度

  • 时间复杂度‌:选择排序的平均时间复杂度和最坏时间复杂度均为O(n^2),因为每次选择最小元素时都需要遍历未排序的部分。
  • 空间复杂度‌:O(1),因为选择排序是就地排序,不需要额外的存储空间。

你学废了吗?

下期预告:十大排序算法之冒泡排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值