You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何选择算法实现数组奇数前置排序?

适合的算法选择与实现方案

首先,你的需求可以拆成两个核心环节:筛选数组中的奇数 + 对筛选出的奇数进行排序。针对不同场景,推荐的算法和实现思路如下:

1. 小规模数据场景(比如你示例中的8元素数组)

如果处理的数组规模很小,提取出的奇数数量不多,直接用冒泡排序就足够了——它的实现逻辑非常简单,代码容易写和调试,完全能满足小规模数据的排序需求。

当然,你也可以直接用编程语言内置的排序函数(比如C语言的qsort、Java的Arrays.sort),这些内置函数都是经过优化的,写起来更省心,不用自己手动实现排序逻辑。

2. 大规模数据场景

如果需要处理的数组非常大,提取出的奇数数量很多,快速排序是更优的选择,它的平均时间复杂度是O(n log n),在大规模数据下的排序效率远高于冒泡排序这类O(n²)的算法。实际开发中优先用语言内置的排序实现就行,不用自己重复造轮子。

代码示例(C语言)

下面是针对你示例的完整实现,包含筛选奇数、排序、输出的步骤:

#include <stdio.h>
#include <stdlib.h>

// 比较函数,用于qsort的升序排序
int compare(const void *a, const void *b) {
    return *(int*)a - *(int*)b;
}

int main() {
    int myArray[8] = {6,3,8,9,6,0,4,7};
    int odds[8]; // 存储筛选出的奇数,数组长度设为原数组长度足够
    int count = 0;

    // 第一步:遍历数组筛选奇数
    for (int i = 0; i < 8; i++) {
        if (myArray[i] % 2 != 0) {
            odds[count++] = myArray[i];
        }
    }

    // 第二步:对奇数数组进行排序
    qsort(odds, count, sizeof(int), compare);

    // 第三步:输出排序后的奇数(如果需要放回原数组开头,只需将排序后的奇数复制回原数组前count个位置即可)
    printf("排序后的奇数:");
    for (int i = 0; i < count; i++) {
        printf("%d ", odds[i]);
    }
    // 输出结果:3 7 9(注:你示例中的输出"3 9 7"未完成排序,应该是笔误)
    return 0;
}

补充说明

如果你的需求是将排序后的奇数放回原数组开头,后面保留原有的偶数顺序,只需要在排序后,把原数组的偶数元素后移count个位置,再将排序后的奇数复制到原数组前count个位置即可,逻辑也很容易实现。

内容的提问来源于stack exchange,提问作者user11766585

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:43:20