用函数的思想解决选择排序

函数的优点

  • 将具体的问题抽象出来
  • 帮助梳理整个架构
  • 函数有助于模块化,可以进行单元测试,让程序更清晰
//对数组进行从小到大的排序
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void initRandarr (int *arr,int n)
{
	srand(time(NULL));
	for (int i = 0; i < n; i++)
	{
		*arr++ = rand()%100;
	}
}
void disArr(int* arr, int n)
{
	for (int i = 0; i < n; i++)
	{
		//printf("arr[i] = %d\n", arr[i]);
		printf("arr[i] = %d\n", *arr++);
	}
}
int getsmallIdx(int i, int* pa, int n)
{
	int idx = i;
	for (int j = i + 1; j < n; j++)
		{ 
		if (pa[j] < pa[idx])
			idx = j;
		}
	return idx;
}
int mySwap(int* pa, int* pb)
{
	int i = *pa;
	*pa = *pb;
	*pb = i;
}

void selectSort(int* pa, int n)
{
	int idx;
	for (int i = 0; i < n - 1; i++)//外部循环
	{
		idx = getsmallIdx(i, pa, n);//i-下标,每次都是求i以后的最小值
		if (idx != i)   //等于就是最小的不等于进行交换
		{ 
			mySwap(&pa[idx], &pa[i]);
		}
	}
}

int main()
{
	int arr[10];
	initRandarr(arr, 10);    //随机化          注意命名规范
	disArr(arr,10);          //输出
	selectSort(arr,10);      //排序
	printf("----------------\n");
	disArr(arr, 10);		 //输出
//设计层面,思路要清晰。先梳理思维,再去补充细节。模块化、打包功能
	return 0;

}

举例数组的5个数 2 3 1 4 5
每次都把for循环的 i 与求最小函数得到的数的下标相比较,若下标不想等则调换想等则说明此时就是最小的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值