题目要求:
- 输入:nums = [-4,-1,0,3,10]
- 输出:[0,1,9,16,100]
- 解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]
示例 2:
- 输入:nums = [-7,-3,2,3,11]
- 输出:[4,9,9,49,121]
对于本题最简单思路是直接将原数组数据进行平方后,放入新数组中,进行排序即可,
核心是需要用到冒泡排序法。
#include<stdio.h>
int main()
{
int date[10] = { -3,1,4,5,6,7,8,9,10,11 }, date1[10] = { 0 };
int size = 0;
int* oppo = NULL;
size = sizeof(date) / sizeof(int);
for (int m = 0; m < size; m++)
{
date1[m] = date[m] * date[m];
}
oppo = search__add(date, size, date1);
for (int G = 0; G < size; G++)
{
printf(" %d ", date1[G]);
}
return 0;
}
在主函数中利用双重循环将date[]*date[]的乘积构成的新数组放入date1[]中,然后进行调用;
下图为基础的冒泡排序后进行值交换,然后返回数组p;
int* search__add(int* hum, int sum, int* p)
{
for (int k = 0; k < sum-1; k++)
{
for (int j = 0; j < sum-1; j++)
{
if (p[j] > p[j + 1])
{
int a = 0;
a = p[j];
p[j] = p[j + 1];
p[j + 1] = a;
}
}
}
return p;
}
第二种方法是用qsort函数进行比较,需要用到头文件 #include<stdlib.h>,
qsort(数组首地址,数组元素个数,数组单个元素的内存大小,比较函数 )
下图为比较函数的代码(进行调用数字比较,最后按照从大到小的顺序进行排序):
int compared(const void *a,const void *b)
{
return *(int* )b- *(int*)a;
}
下图为完整代码:
#include<stdio.h>
#include<stdlib.h>
int compared(const void *a,const void *b)
{
return *(int* )b- *(int*)a;
}
int sum[11] = { 1,2,5,4,9,8,16,3,7,8,9 };
int sum1[11] = { 0 };
//int sum1[100] = { 0 };
int main()
{
// int sum1[100] = { 0 };
//int *t=(int *)malloc(sizeof(sum1[12]));
for (int w = 0; w < 11; w++)
{
sum1[w]=sum[w]*sum[w];
}
qsort(sum1,11,4, compared);
for(int w=0;w<11;w++)
{
printf("%d\t",sum1[w]);
}
return 0;
}