实现选择排序

/*
 * 此程序用于实现选择排序
 * 作者:zhy
 * 时间:2021/7/20
 */

#include <stdio.h>
#include <stdlib.h>

// 用双重循环实现
// 参数array为排序数组首地址,参数len为排序元素个数
void selectsort1(int *array,int len);


// 使用递归实现
// 参数array为排序数组首地址,参数len为排序元素个数
void selectsort2(int *array,int len);

int main(int argc,char *argv[])
{
	int ii;
	int arr[]={44,3,38,5,47,15,36,26,27,2,46,4,19,50,48};
	//int arr[]={3,4,5,1};
	int len=sizeof(arr)/sizeof(int);
  
	selectsort1(arr,len);  // 采用两层循环排序的方法。
	// 显示排序结果。
	for (ii=0;ii<len;ii++) printf("%2d ",arr[ii]);
	printf("\n");

	selectsort2(arr,len);  // 采用递归排序的方法。
	// 显示排序结果。
	for (ii=0;ii<len;ii++) printf("%2d ",arr[ii]);

	printf("\n");

	return 0;

}

void selectsort1(int *array,int len)
{
	int ii;		// 迭代次数的计数器
	int jj;		// 本次迭代元素个数

	for (ii = 0; ii < len - 1;ii++)
	{
		int  mininfo = ii;	// 最小元素的下标暂存位
		for (jj = ii + 1; jj < len;jj ++)
		{
			if ( array[jj] < array[mininfo] )
				mininfo = jj;
		}
		if (ii != mininfo)
		{
			array[ii] += array[mininfo];
			array[mininfo] = array[ii] - array[mininfo];
			array[ii] -= array[mininfo];
		}
	}
}

void selectsort2(int *array,int len)
{
	if (len == 1) return;

	int jj;		// 本次迭代元素个数
	
	int  mininfo = 0;	// 最小元素的下标暂存位
	for (jj = 1; jj < len;jj ++)
	{
		if ( array[jj] < array[mininfo] )
			mininfo = jj;
	}
	if (0 != mininfo)
	{
		array[0] += array[mininfo];
		array[mininfo] = array[0] - array[mininfo];
		array[0] -= array[mininfo];
	}

	selectsort2(array+1,--len);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值