我有一个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
被保证为0
或1
,这里有一个单独测试的替代方案,可能更快:if ((ptr->next->value < ptr->value) == is_ascending) ...
相同的元素将以不同的顺序排列,但排序仍然正确。
关于c - 使用三元运算符作为占位符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30636872/