请写一个双向链表的快速排序函数
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
typedef struct Node {
int data;
struct Node* prev;
struct Node* next;
} Node;
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->prev = NULL;
newNode->next = NULL;
return newNode;
}
void insertNode(Node** head, int data) {
Node* newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
return;
}
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
newNode->prev = temp;
}
void swap(Node* a, Node* b) {
int temp = a->data;
a->data = b->data;
b->data = temp;
}
Node* partition(Node* low, Node* high) {
int pivot = high->data;
Node* i = low->prev;
for (Node* j = low; j != high; j = j->next) {
if (j->data <= pivot) {
i = (i == NULL) ? low : i->next;
swap(i, j);
}
}
i = (i == NULL) ? low : i->next;
swap(i, high);
return i;
}
// 双向链表快速排序函数
void quickSort(Node* low, Node* high) {
if (high != NULL && low != high && low != high->next) {
Node* pi = partition(low, high);
quickSort(low, pi->prev);
quickSort(pi->next, high);
}
}
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main(int argc, const char *argv[])
{
Node* head = NULL;
insertNode(&head, 3);
insertNode(&head, 1);
insertNode(&head, 4);
insertNode(&head, 1);
insertNode(&head, 5);
insertNode(&head, 9);
insertNode(&head, 2);
insertNode(&head, 6);
insertNode(&head, 5);
insertNode(&head, 3);
insertNode(&head, 8);
printf("排序前: ");
printList(head);
Node* last = head;
while (last->next != NULL) {
last = last->next;
}
quickSort(head, last);
printf("排序后: ");
printList(head);
return 0;
}