c - 实现插入算法

标签 c algorithm insertion-sort

我已经用 c 编程语言实现了插入算法,但是当我试图将它扩展到递增和递减顺序时我遇到了一个小问题,问题是重复了一小段代码:

typedef int order_t;

#define INCREASING  0
#define DEACREASING 1

extern void insertion_sort(int *const arr, size_t arr_size, order_t order) {
    register size_t i, j;
    register int key;

    for(i = 1; i < arr_size; ++i) {
        key = arr[i];

        if(order == INCREASING) 
            for(j = i - 1; j >= 0 && arr[j] > key; --j) {
                arr[j+1] = arr[j];
            }
        else {
            for(j = i - 1; j >= 0 && arr[j] < key; --j) {
                arr[j+1] = arr[j];
            }
        }

        arr[j+1] = key;
    }
}

有没有办法让 for 语句和 for 里面的 a[j+1] = arr[j] 只写一次?

最佳答案

for(i = 1; i < arr_size; ++i) {
    key = arr[i];

    for(j = i - 1; j >= 0 && (order == INCREASING ? (arr[j] > key) : (arr[j] < key)) ; --j) {
         arr[j+1] = arr[j];
    }

    arr[j+1] = key;
}

关于c - 实现插入算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24793004/

相关文章:

c - 在 C 程序中打开批处理文件 (.bat)?

c - Ansi-C C99 接口(interface)与结构

algorithm - 在无向无环图中找到两个节点之间的最大权重边

c# - 将人的高度从英尺和英寸转换为英寸 C#

不同操作系统上的python ctypes问题

算法题: Largest contiguous subarray selection

c - 插入排序的错误输出

java - C 代码给出了错误的答案,但 java 代码给出了关于 spoj 的正确答案

arrays - 当我对数组 B 进行排序时,数组 A 的内容发生了变化,数组 B 应该是 A 的重复项

objective-c - 将 CGFloat 转换为 NSUInteger 返回 0