#创作灵感--一个蜗牛的风言风语,不作数酒剑仙#
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;
}