欢迎回来,为了新青年

#创作灵感--一个蜗牛的风言风语,不作数酒剑仙#
1·记录工作实践、项目复盘
   完成了几辆车的录了; 然后东西找到了
2·写技术笔记巩固知识要点
    技术笔记实现了回调函数,然后排序的回顾
3·发表职场感悟心得
    职场感悟,情商能以水之心 守恒 ,守道,  兄弟们的存在比钱更重要。
    与领导同思维,阵线保持一致;

4·搬运自己的原创文章到这:
    就简单的排序的实现
    回调函数的实现

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void selectSort(void *arr, int eleSize, int len, int(*myCompare)(void *, void *));

int myCompareInt(void * data1, void * data2);

void test01()
{
	int arr[] = { 10, 40, 30, 20, 50 };
	int len = sizeof(arr) / sizeof(int);
	selectSort(arr, sizeof(int), len, myCompareInt);

	for (int i = 0; i < len; i++)
	{
		printf("%d\n", arr[i]);
	}
}

struct Person
{
	char name[64];
	int age;
};


int myComparePerson(void * data1, void * data2)
{
	struct Person * p1 = data1;
	struct Person * p2 = data2;
	//按照年龄 进行从大到小  降序
	return  p1->age > p2->age;
}

void test02()
{
	struct Person pArray[] =
	{
		{ "aaa", 10 },
		{ "bbb", 60 },
		{ "ccc", 20 },
		{ "ddd", 40 },
		{ "eee", 30 },
	};
	int len = sizeof(pArray) / sizeof(struct Person);

	//按照年龄实现从大到小排序
	selectSort(pArray, sizeof(struct Person), len, myComparePerson);

	for (int i = 0; i < len; i++)
	{
		printf("姓名:%s  , 年龄: %d\n", pArray[i].name, pArray[i].age);
	}

}

int main() {
	test01();
	//test02();

	system("pause");
	return EXIT_SUCCESS;
}
/*
* arr;  是数组的位置
* eleSize  元素的大小
 len ; 多少个元素
 myCompare ; 你要调的回调函数
*/
void selectSort(void * arr, int eleSize, int len, int(*myCompare)(void *, void *))
{
	char *temp = malloc(eleSize);

	for (int i = 0; i < len; i++)
	{
		int minOrMax = i; //定义最小值 或者最大值下标

		for (int j = i + 1; j < len; j++)
		{

			//j下标的数据地址
			char  * pJ = (char *)arr + j * eleSize;
			char * pMinOrMax = (char *)arr + minOrMax * eleSize;

			/*
				//从小到大
					if (*num1 <  *num2)
					{
					return 1;
					}
					return 0;
				*/

			if (myCompare(pJ, pMinOrMax))
			{

				minOrMax = j; //更新 真实最小值 或者 最大值的下标
			}

			//if (arr[j] <  arr[minOrMax])

		}
		//
		if (i != minOrMax)
		{
			//交换数据
			char * pI = (char *)arr + i * eleSize;
			char * pMinOrMax = (char *)arr + minOrMax * eleSize;

			memcpy(temp, pI, eleSize);
			memcpy(pI, pMinOrMax, eleSize);
			memcpy(pMinOrMax, temp, eleSize);
		}
	}

	if (temp != NULL)
	{
		free(temp);
		temp = NULL;
	}
}

int myCompareInt(void * data1, void * data2)
{
	int * num1 = data1;
	int * num2 = data2;

	//if (*num1 < *num2)
	//{
	//	return 1;
	//}
	//return 0;


	return *num1 < *num2;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值