我有一个bubble sort linkedList函数声明为,

void bubble_sort_linkedList(node *head);

函数的定义(按升序排序)如下:
void bubble_sort_linkedList(node *head){

            node *ptr, *lptr;
            int temp;
            lptr = NULL; ptr = head;
            if(ptr == NULL || ptr->next == NULL)
                return;
            while(ptr != lptr){
                while(ptr->next != lptr){
                    if(ptr->next->value < ptr->value){    // Change the inequality sign
                        temp = ptr->next->value;
                        ptr->next->value = ptr->value;
                        ptr->value = temp;
                    }
                    ptr = ptr->next;
                }
                lptr = ptr;
                ptr = head;
            }
            return;
        }

现在,我希望同一个函数也按降序排序,只需对登录注释行进行一次更改。
所以,我计划做的改变是:
void bubble_sort_linkedList(node *head, bool is_ascending);  //Prototype declaration

升序是从主函数传递的决策。
相同的函数,但三元运算符用作占位符(这是我混淆的部分,三元运算符是否可以如下所示?)
void bubble_sort_linkedList(node *head, bool is_ascending){

    node *ptr, *lptr;
    int temp;
    lptr = NULL; ptr = head;
    if(ptr == NULL || ptr->next == NULL)
        return;
    while(ptr != lptr){
        while(ptr->next != lptr){
            if(ptr->next->value ((is_ascending) ? <:>)  ptr->value){
                temp = ptr->next->value;
                ptr->next->value = ptr->value;
                ptr->value = temp;
            }
            ptr = ptr->next;
        }
        lptr = ptr;
        ptr = head;
    }
    return;
}

最佳答案

你不能这样做。但您可以编写一个表达式来进行条件比较:

if (is_ascending ? ptr->next->value < ptr->value : ptr->next->value > ptr->value) ...

如果is_ascending被保证为01,这里有一个单独测试的替代方案,可能更快:
if ((ptr->next->value < ptr->value) == is_ascending) ...

相同的元素将以不同的顺序排列,但排序仍然正确。

关于c - 使用三元运算符作为占位符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30636872/

10-10 12:30