链接列表上的快速排序,如何使此代码使用第一个元素作为枢轴而不是最后一个

问题描述 投票:-1回答:1

为了使此代码能够使用第一个元素而不是最后一个元素来工作,我必须实现哪些功能?

我采取的任何方法都行不通,任何帮助将不胜感激,谢谢!!!!!!

struct Node* partition(struct Node *l, struct Node *h) 
{ 
    // set pivot as h element 
    int x = h->data; 

    // similar to i = l-1 for array implementation 
    struct Node *i = l->prev; 

    // Similar to "for (int j = l; j <= h- 1; j++)" 
    for (struct Node *j = l; j != h; j = j->next) 
    { 
        if (j->data <= x) 
        { 
            // Similar to i++ for array 
            i = (i == NULL) ? l : i->next; 

            swap(&(i->data), &(j->data)); 
        } 
    } 
    i = (i == NULL) ? l : i->next; // Similar to i++ 
    swap(&(i->data), &(h->data)); 
    return i; 
} 

/* A recursive implementation of quicksort for linked list */
void _quickSort(struct Node* l, struct Node *h) 
{ 
    if (h != NULL && l != h && l != h->next) 
    { 
        struct Node *p = partition(l, h); 
        _quickSort(l, p->prev); 
        _quickSort(p->next, h); 
    } 
} 

// The main function to sort a linked list. 
// It mainly calls _quickSort() 
void quickSort(struct Node *head) 
{ 
    // Find last node 
    struct Node *h = lastNode(head); 

    // Call the recursive QuickSort 
    _quickSort(head, h); 
}


我采取的任何方法都行不通,任何帮助将不胜感激,谢谢!!!!!!

c linked-list quicksort
1个回答
0
投票
// set pivot as h element 
int x = h->data; 

将枢轴设置为低位元素,即第一个元素,在这里:

int x = l->data; 
© www.soinside.com 2019 - 2024. All rights reserved.