选择排序算法详解_八大排序算法图解

选择排序算法详解_八大排序算法图解选择排序就是从待排序的元素中选择最小(最大)的元素,将其放在有序序列的相应位置,使这些元素构成有序序列。选择排序主要有两种:简单选择排序和堆排序。【简单选择排序】编写算法,要求使用简单选择排序算法对元素65、32、71、28、83、7、53、49进行从小到大排序。【算法思想】简单选择排序是一种简单的选择类排序算法,它的基本思想描述如下:假设待排序的元素有n个,在第一趟排序过程…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

选择排序就是从待排序的元素中选择最小(最大)的元素,将其放在有序序列的相应位置,使这些元素构成有序序列。选择排序主要有两种:简单选择排序和堆排序。

【简单选择排序】

编写算法,要求使用简单选择排序算法对元素65、32、71、28、83、7、53、49进行从小到大排序。

【算法思想】

简单选择排序是一种简单的选择类排序算法,它的基本思想描述如下:

假设待排序的元素有n个,在第一趟排序过程中,从n个元素序列中选择最小的元素,并将其放在元素序列的最前面,即第一个位置。在第二趟排序过程中,从剩余的n-1个元素中,选择最小的元素,将其放在第二位置。以此类推,直到没有待比较的元素,简单选择排序算法结束。

例如:

给定一组元素序列:55、33、22、66、44。简单选择排序的过程如下:

* 第一趟排序:从第1个元素开始,将第1个元素与第2个元素进行比较,因为55>33,所以33是较小的元素;继续将33与第3个元素22比较,因为33>22,所以22成为较小的元素;将22与第4个元素66比较,因为22<66,所以22仍然是比较小的一个元素;最后将22与第5个元素44比较,因为22<44,所以22就是这5个元素中最小的一个元素,并将22与第1个元素交换,此时,完成第1趟排序。第1趟排序过程如下图:

选择排序算法详解_八大排序算法图解

初始时,假设最小元素的下标为0。在比较过程中,用j记下最小元素的下标。经过第1趟排序后,最小的元素位于第1个位置上(处于正确的位置)。

*第二趟排序:从第2元素开始,将第2个元素与第3个元素进行比较,因为33<55,所以33是较小的元素;继续将33与第4个元素66比较,因为33<66,所以33仍然是较小的元素;将33与第5个元素44进行比较,因为33<44,所以33就是最小的元素,并将33与第2个元素进行交换,此时,完成第2趟排序。第2趟排序过程如下图。

选择排序算法详解_八大排序算法图解
在第2趟排序过程中,33收最小的元素,本身就在第2个位置,不需要移动元素。

*第三趟排序:从第3个元素开始,将第3个元素和第4个元素进行比较,因为55<66,所以55是较小的元素;继续将55与第5个元素44比较,因为55>44,所以44是较小的元素,并将44与第3个元素交换,此时,完成第3趟排序,过程如下:

选择排序算法详解_八大排序算法图解

到目前为止前三个元素都已经有序,接下来只需确定第四个元素和第五个元素的顺序即可。

*第四趟排序:比较第4个元素与第5个元素,即66与55的大小,因为66>55,所以55是较小的元素,并将66与55交换,此时,完成第4趟排序。第4趟排序过程如图所示。

选择排序算法详解_八大排序算法图解

此时,前4个元素都已经有序且位于正确的位置上,那么,第5个元素也位于正确的位置上。因此,整个简单选择排序结束。

【示例】

假设待排序元素有8个,分别是65、32、71、28、83、7、53、49。使用简单选择排序对该元素序列过程如图所示。

在简单选择排序过程中,如果待排序元素的个数为n,则需要n-1趟剖需要。对于第i趟排序,需要比较的次数为i-1。当第i趟排序完毕,将该趟排序过程中最小的元素放在第i个位置,此时,前i个元素都已经有序且在正确的位置上。

选择排序算法详解_八大排序算法图解

code:

#include<stdio.h>
void SelectSort(int a[], int n);
void DispArray(int a[], int n);
void main()
{
	int a[] = { 65,32,71,28,83,7,53,49 };
	int n = sizeof(a) / sizeof(a[0]);
	printf("排序前:\n");
	DispArray(a, n);
	SelectSort(a, n);
	printf("最终排序结果:");
	DispArray(a, n);
	getchar();
}
void SelectSort(int a[], int n)
/*简单选择排序*/
{
	int i, j, k, t;
	/*将第i个元素与第i+1...n个元素比较,将最小的的元素放在第i个位置*/
	for (i = 0; i<n - 1; i++)
	{
		j = i;
		for (k = i + 1; k<n; k++)	/*最小的元素的序号为j*/
			if (a[k]<a[j])
				j = k;
		if (j != i)			/*如果序号i不等于j,则需要将序号i和序号j的元素交换*/
		{
			t = a[i];
			a[i] = a[j];
			a[j] = t;
		}
		printf("第%d趟排序结果:", i + 1);
		DispArray(a, n);
	}
}
void DispArray(int a[], int n)
/*输出数组中的元素*/
{
	int i;
	for (i = 0; i<n; i++)
		printf("%4d", a[i]);
	printf("\n");
}

Jetbrains全家桶1年46,售后保障稳定

 result:

选择排序算法详解_八大排序算法图解

【主要用途】

简单选择排序算法实现简单,适用于排序元素较少且对时间要求不高的场合。

【稳定性与复杂度】

简答选择排序森一种不稳定的排序算法。在最坏的情况下,待排序的严肃序列按照非递减排列,则不要移动元素。在最坏的情况下,待排序元素按照非递增排列,则在每一趟都需要移动元素,移动元素的次数为3(n-1)。在任何情况下,简单选择排序算法都需要进行n(n-1)/2 的比较。综上,简单选择排序算法的时间复杂度是O(n^2)。简答选择排序的空间复杂度为O(1)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219177.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • matlab读取txt文件为数组「建议收藏」

    matlab读取txt文件为数组「建议收藏」clc;clear;closeall;rows=[1180];%4行到17行。cols=[11];%3到8列。[FileName,PathName]=uigetfile(‘*.txt’,’SelecttheTxtfiles’);%弹出对话框,然后选择你要处理的文件fid=fopen([PathNameFileName]);temp=textscan(f…

    2025年9月18日
    8
  • docker部署jenkins安装使用教程_docker封装python程序

    docker部署jenkins安装使用教程_docker封装python程序前言使用docker安装jenkins环境,jenkins构建的workspace目录默认是在容器里面构建的,如果我们想执行python3的代码,需进容器内部安装python3的环境。进jenki

    2022年7月31日
    9
  • vscode插件配置_vscode bootstrap插件

    vscode插件配置_vscode bootstrap插件vscode插件列表及配置信息

    2022年4月21日
    277
  • K3 官改新手小白配置阿里DDNS 超级详细「建议收藏」

    K3 官改新手小白配置阿里DDNS 超级详细「建议收藏」K3官改新手小白配置阿里DDNS超级详细写的比较仓促,不对之处请指正,这个是写给小白看的,大神勿喷首先介绍一下什么是DDNSDDNS(DynamicDomainNameServer)是动态域名服务的缩写。DDNS是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务器…

    2022年6月12日
    44
  • 分享一下最近的面试题,都是大厂

    分享一下最近的面试题,都是大厂

    2022年2月14日
    55
  • jwt解析网站_jwt工作原理

    jwt解析网站_jwt工作原理1.Token与Session优缺点概述1.1Session的由来在登录一个网站进行访问时由于HTTP协议是无状态的就是说一次HTTP请求后他就会被销毁,比如我在www.a.com/login里面登录了,然后你就要访问别的了比如要访问www.a.com/index但是你访问这个网站你就得再发一次HTTP请求,至于说之前的请求跟现在没关,不会有任何记忆,这次访问会失败,因为无法验证你的身份。所以你登录完之后每次在请求上都得带上账号密码等验证身份的信息,但是你天天这么带,那太麻烦了。那还可以这样,把我第一

    2022年10月17日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号