gpt4 book ai didi

c - C语言获取数组元素升序

转载 作者:行者123 更新时间:2023-11-30 21:46:26 24 4
gpt4 key购买 nike

我想按输入数组的顺序替换它们:

array = { 5, 1, 4 } ==> result = { 2, 0 ,1 }

但我不知道如何替换同一位置的订单元素。

输出为:0 1 2

#include <stdio.h>
#include <time.h>
#include <math.h>

void sort(int tab[], int n) {
int i, a, j;
for (i = 0; i < n; ++i) {
for (j = i + 1; j < n; ++j) {
if (tab[i] > tab[j]) {
a = tab[i];
tab[i] = tab[j];
tab[j] = a;
}
}
}
}

void getOrder(int tab[]) {
int i;
sort(tab, 3);
for (i = 0; i < 3; i++)
tab[i] = i; // replace(tab[i],i)
}

int main() {
int tab[3] = { 5, 1, 4 }, i, j;
getOrder(tab);
for (i = 0; i < 3; i++)
printf(" %d ", tab[i]);
return 0;
}

最佳答案

如果您可以假设所有值都不同,则对于 tab 中的每个值,其在排序数组中的位置就是 tab 中严格较低的值的数量:

其工作原理如下:

#include <stdio.h>

void getOrder(const int tab[], int n, int pos[]) {
for (int i = 0; i < n; i++) {
int count = 0;
for (int j = 0; j < n; j++)
count += (tab[j] < tab[i]);
pos[i] = count;
}
}

int main() {
int tab[3] = { 5, 1, 4 };
int pos[3];
int n = sizeof(tab) / sizeof(tab[0]);

getOrder(tab, n, pos);
for (int i = 0; i < n; i++)
printf("%d ", pos[i]);
printf("\n");
return 0;
}

如果您希望重复项有不同的索引值,可以使用 2 个循环,测试次数稍少:

void getOrder(const int tab[], int n, int pos[]) {
for (int i = 0; i < n; i++) {
int j, count = 0;
for (j = 0; j < i; j++)
count += (tab[j] <= tab[i]);
while (++j < n)
count += (tab[j] < tab[i]);
pos[i] = count;
}
}

关于c - C语言获取数组元素升序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55929478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com