比如我有一个数组{1,2,2,3,3,3,3,4,4,4,4,4,}我需要把它转换成{4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,1}所以我必须用数组元素的重复次数来排序。我在C++上看到过一些解决这个问题的方法,但是我必须用C来写。我不能用vector或smth。仅使用缓冲区数组或精确数组内部进行排序。
我尝试过这样的事情,但老实说,现在我 eclipse 刻到一个死胡同:我脑子里有一个算法:
1.程序计算某个元素重复的次数并写入第二个数组
1.程序排序第二个数组
1.程序以某种方式对第一个数组和第二个数组进行排序
#include <stdio.h>
int main()
{
const int size = 10;
int A[size], B[size];
int counter1, counter2 = -1;
int temp = 0;
for (int i = 0; i < size; i++) {
printf("Enter %d element of array: ", i + 1);
scanf_s("%d", &A[i]);
}
for (int i = 0; i < size-1; i++) {
counter1 = 0;
counter2++;
for (int j = i; j < size; j++) {
if (A[j] == A[j - 1]) {
break;
}
if (A[j] == A[j+1]) {
counter1++;
B[counter2] = counter1;
temp = A[i];
}
}
}
for (int i = 0; i < size; i++) {
printf("El %d = %d\n",i+1,B[i]);
}
}
2条答案
按热度按时间gzjq41n41#
虽然不是最好的,但它确实完成了任务!我将最终结果存储在
Result[len][2];
变量中!您可以根据需要修改代码在Linux环境下,我的计算机上的输出如下所示:
4ioopgfo2#
如何按重复次数对数组进行排序
1.依值排序大小为
m
的数组A
。1.遍历数组并计算不同值的个数:
n
1.分配
struct
s的大小为n
的数组B[]
,该数组具有2个成员:价值和发生。1.再次遍历数组
A[]
并填充B[]
1.依
.occurrence
排序B[]
。1.遍历
B[]
并重新填充A[]
。时间复杂度为O(m *log m)。