选择排序算法详解之C语言版

一、算法原理

选择排序属于不稳定排序法,是一种常用的排序算法,其时间复杂度为O(n^2)。
所谓的不稳定排序算法是指在一组数据中存在多个相同的数据,但是在排序之后,相同数据的前后位置会发生改变。例如有数据{5, 5., 2},使用选择排序法,排序结果为{2, 5., 5},即两个相同数据5的前后位置发生了改变。
选择排序算法原理就是首先固定一个位置i,用该位置上的元素data与后面的元素data_j依次比较大小。以从小到大排序为例,如果data > data_j,则交换这两个数据,直到位置i之后的所有元素都小于该位置上的元素结束。之后执行i++即可完成该数组的排序。
Demo:假设有数据如下表所示:数组名记为data
在这里插入图片描述
Step 1:固定下标i为1,取出其位置上的元素data[1],与之后的每一个位置上的元素进行比较,当比较到位置3的时候,该位置上的元素data[3]<data[1],此时交换data[1]和data[3],得到如下数组。
在这里插入图片描述
然后从data[4]开始继续和data[1]比较,重复前述工作,最终完成与data[1]的比较,并得到如下的数组:
在这里插入图片描述
Step 2:固定下标为2,从data[3]开始比较与data[2]的大小,遇到反序的元素则交换。最终得到如下数组:
在这里插入图片描述
Step 3:固定下标为3,从data[4]开始比较与data[3]的大小,遇到反序的元素则交换。最终得到如下数组:
在这里插入图片描述
Step 4:固定下标为4,从data[5]开始比较与data[4]的大小,遇到反序的元素则交换。最终得到如下数组:
在这里插入图片描述
Step 5:固定下标为5,从data[6]开始比较与data[5]的大小,遇到反序的元素则交换。最终得到如下数组:
在这里插入图片描述

二、算法

1. 固定某个位置i的排序算法
Step 1: 取出元素data[i];
Step 2:j = i+1,比较data[i]和data[j],如果反序则交换data[i]和data[j]的值,转Step 3;
Step 3:j = j+1,如果j等于数组的长度n,则结束,否则转Step 2.
2.选择排序算法
固定的位置i从1开始直到i=n-1,依次执行上述固定位置的排序算法即可。
从算法流程可以看出,选择排序算法的时间复杂度是O(n^2)。
3.选择排序算法流程图
在这里插入图片描述

三、算法之C程序

1.选择排序算法之C语言版

/*
功能:使用选择排序法对数组data进行排序
输入参数:
	data,已知数据散乱的数组
	n,元素的个数
输出参数:
	Data,排好序的数组
返回值:无 
*/
void SelectionSort( int data[], int n )
{
   
   
	int i, j, t, k;
	for( i = 1; i <= n-1; i++ )
	{
   
   
		//输出每一轮排序前的状态 
		for( k = 1; k <= n; k++  )
		{
   
   
			printf( "%5d", data[k] );
		}
		print
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值