链表实现排序算法 联系客服

发布时间 : 星期四 文章链表实现排序算法更新完毕开始阅读737e31f88662caaedd3383c4bb4cf7ec4bfeb624

北京邮电大学信息与通信工程学院

{ if (s->data < p->data) { comparision++; front->data = s->data; movement++; Node*x = p; Node*y = s; while (front->data < x->data) { comparision++; y->data = x->data; movement++; x = x->previor; y = y->previor; } y->data = front->data; movement++; } comparision++; p = p->next; s = s->next; } }

冒泡排序函数:每一次内循环边比较边交换,将无序区中最大的数放入有序区中,

并记录无序元素的范围。当无序元素指向front时即整体排序完成。

void LinkList::bubblesort() {

Node*s = front->previor; //初始化无序元素位置 while (s != front) { Node*p = s; //本次无序元素位置 s = front; Node*x = front->next; Node*y = x->next; while (x != p) { if (x->data > y->data) { comparision++; front->data = x->data; x->data = y->data; y->data = front->data;

第5页

北京邮电大学信息与通信工程学院

movement = movement + 3; s = x; //更新无序元素位置 } comparision++; x = x->next; y = y->next; } } }

快速排序函数:快速排序函数是个递归调用函数,关键在一次快速排序函数的

编写。选择第一个元素作为分区的轴值,将待排序元素分成左右两个区域,左区的元素都比轴值小,右边的都更大。

然后反复进行此操作,即可完成排序。而结束递归的关键便是 左右分界节点有了直接前后继关系的时候。 void LinkList::Qsort(Node*x,Node*y) { if (x->previor != y) { Node*pivot = partion(x, y); Qsort(x, pivot->previor); Qsort(pivot->next, y); } }

Node* LinkList::partion(Node*first, Node*end) {

int basic = first->data; while (first != end) { while ((first != end) && (end->data >= basic)) { end = end->previor; comparision++; } comparision++; first->data = end->data; movement++; while ((first != end) && (first->data <= basic)) { first = first->next; comparision++; } comparision++; end->data = first->data;

第6页

北京邮电大学信息与通信工程学院

}

movement++; }

first->data = basic; movement++; return first;

简单选择排序函数:是将待排序中最小的元素放置序列最前面,其关键是先

通过循环比较确定最小元素的位置,再进行数据交换,从而大大减少了元素交换的次数。void LinkList::selectsort() {

Node*s = front->next; while (s != front->previor) { Node*p = s->next; Node*record = s; while (p != front) { Node*x = record; if (p->data < x->data) { comparision++; record = p; } comparision++; p = p->next; } if (record != s) { int a = record->data; record->data = s->data; s->data = a; movement = movement + 3; } s = s->next; } }

第7页

北京邮电大学信息与通信工程学院

3. 程序运行结果分析

第8页