其他分享
首页 > 其他分享> > 实现选择排序

实现选择排序

作者:互联网

/*
 * 此程序用于实现选择排序
 * 作者: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);

}

标签:ii,mininfo,实现,len,选择,int,jj,array,排序
来源: https://blog.csdn.net/HomeMany/article/details/119236949