C++ C++;双链表上的冒泡排序
我看到了冒泡排序算法,我希望排序函数像开关一样执行升序和降序,它在升序情况下工作良好,但在降序时不工作,为什么? 以下是节点和排序功能:C++ C++;双链表上的冒泡排序,c++,sorting,bubble-sort,doubly-linked-list,C++,Sorting,Bubble Sort,Doubly Linked List,我看到了冒泡排序算法,我希望排序函数像开关一样执行升序和降序,它在升序情况下工作良好,但在降序时不工作,为什么? 以下是节点和排序功能: 该节点将动态字符串数组作为数据,因此我希望它仅基于某一列进行排序,列的索引是bubbleSort中的index struct EntryNode { string *entry; EntryNode *prev; EntryNode *next; }; void bubbleSort(EntryNode*start、int索引、枚举
该节点将
动态字符串数组
作为数据,因此我希望它仅基于某一列进行排序,列的索引是bubbleSort
中的index
struct EntryNode {
string *entry;
EntryNode *prev;
EntryNode *next;
};
void bubbleSort(EntryNode*start、int索引、枚举顺序){
int交换,i;
入口节点*ptr1;
EntryNode*lptr=NULL;
/*检查空列表*/
if(start==NULL)返回;
如果(顺序==升序){
做
{
交换=0;
ptr1=启动;
while(ptr1->next!=lptr)
{
如果(ptr1->entry[index]),比较(ptr1->next->entry[index])>0)
{
ll_swapData(ptr1,ptr1->next);
交换=1;
}
ptr1=ptr1->next;
}
lptr=ptr1;
}
while(交换);
}
如果(顺序==降序){
做
{
交换=0;
ptr1=启动;
while(ptr1->next!=lptr)
{
if(ptr1->entry[index]。比较(ptr1->next->entry[index])next);
交换=1;
}
ptr1=ptr1->next;
}
lptr=ptr1;
}
while(交换);
}
}
那么ll_swapData
的代码在哪里?这可能很重要。std::string
具有
。比比较
可读性强得多。
void bubbleSort(EntryNode *start, int index, enum order order) {
int swapped, i;
EntryNode *ptr1;
EntryNode *lptr = NULL;
/* Checking for empty list */
if (start == NULL) return;
if (order == ASCENDING) {
do
{
swapped = 0;
ptr1 = start;
while (ptr1->next != lptr)
{
if (ptr1->entry[index].compare(ptr1->next->entry[index])>0)
{
ll_swapData(ptr1, ptr1->next);
swapped = 1;
}
ptr1 = ptr1->next;
}
lptr = ptr1;
}
while (swapped);
}
if (order == DESCENDING) {
do
{
swapped = 0;
ptr1 = start;
while (ptr1->next != lptr)
{
if (ptr1->entry[index].compare(ptr1->next->entry[index])<0)
{
ll_swapData(ptr1, ptr1->next);
swapped = 1;
}
ptr1 = ptr1->next;
}
lptr = ptr1;
}
while (swapped);
}
}