33,311
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
#include <locale.h>
typedef struct Node
{
int data;
struct Node *next;
}LNode, *LinkList;
void QuickSort2(LinkList head, LinkList tail){
if(head == tail) //如果头指针为空或者链表为空,直接返回
return ;
//if (head->next == tail || head->next->next == tail)
//return;
int t;
LinkList p = head -> next;
LinkList small = head;
while( p != tail){
if(p -> data < head -> data){
small = small -> next;
t = small -> data;
small -> data = p -> data;
p -> data = t;
}
p = p -> next;
}
t = head -> data;
head -> data = small -> data;
small -> data = t;
QuickSort2(head, small);
QuickSort2(small -> next, tail);
}
void create_list(LinkList *L) {
int i;
int n;
LinkList head,p,q;
*L = ( struct Node *)malloc(sizeof(LNode));
p = *L;
head = NULL;
p->data = -1;
p->next = NULL;
printf("请输入您需要生成的结点个数:");
scanf("%d", &n);
for(i = 0; i < n; i++) {
q=(struct Node *)malloc(sizeof(LNode));
if (NULL==q) exit(1);
q->data=rand()%100;
q->next=NULL;
if (NULL==p) {
head=q;
p=head;
} else {
p->next=q;
p=q;
}
}}
void traverse_list(LinkList L) {
LinkList p = L->next;
while(NULL != p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return;
}
main(){
LinkList La = NULL;
clock_t start, finish;
double duration;
create_list(&La);
//printf("排序前:\n");
traverse_list(La);
//InitList(&La);
//start=clock();
QuickSort2(La,NULL);
//finish=clock();
//printf("排序后:\n");
traverse_list(La);
//duration = (double)(finish - start) / CLOCKS_PER_SEC;
//printf( "%f seconds\n", duration );
return 0;
}