函数的优点
- 将具体的问题抽象出来
- 帮助梳理整个架构
- 函数有助于模块化,可以进行单元测试,让程序更清晰
//对数组进行从小到大的排序
#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 与求最小函数得到的数的下标相比较,若下标不想等则调换想等则说明此时就是最小的