C++链表冒泡排序
2015-07-15 21:23
344 查看
#include <iostream> using namespace std; //别问我为什么要写链表的冒泡排序。 struct Node { int data; Node *next; Node(int d = int()) :data(d), next(NULL){} }; class List { public: List(int a[], int n) { first = NULL; for (int i = 0; i < n; i++) { if (first == NULL) { first = new Node(a[i]); } else { Node *s = new Node(a[i]); Node *p = first; while (p->next != NULL) { p = p->next; } s->next = p->next; p->next = s; } } } //冒泡排序 void Bul() { Node *ptr_one = first; Node *ptr_twe; Node *pr_one = NULL; Node *save = NULL; if (ptr_one == NULL || ptr_one->next == NULL)return; while (ptr_one != NULL && ptr_one->next != NULL) { Node *pr_twe = ptr_one; Node *m2 = NULL; save = ptr_one; for (ptr_twe = ptr_one->next; ptr_twe != NULL;) { if (ptr_one->data > ptr_twe->data) { if (pr_one == NULL) { Node *m1; Node *a; m1 = ptr_twe->next; m2 = ptr_one->next; first->next = m1; pr_twe->next = first; a = first; ptr_twe->next = m2; first = ptr_twe; save = ptr_twe; ptr_twe = a; ptr_one = first; } else { Swap(pr_one, pr_twe); save = pr_one->next; ptr_one = save; ptr_twe = pr_twe->next; } } pr_twe = ptr_twe; if (ptr_twe == NULL)continue; ptr_twe = ptr_twe->next; } pr_one = save; ptr_one = pr_one->next; } } void Swap(Node *prv1, Node *&prv2) { if (prv1->next == prv2) { Node *m = prv1->next; Node *n = prv2->next; m->next = n->next; n->next = m; prv1->next = n; prv2 = n; } else { Node *m1 = prv1->next; Node *save = m1->next; Node *m2 = prv2->next; m1->next = m2->next; prv2->next = m1; m2->next = save; prv1->next = m2; } } void Printf() { Node *p = first; while (p != NULL) { cout << p->data << " "; p = p->next; } cout << endl; } private: Node *first; }; int main() { int a[] = { 3, 10, 13, 102, 3, 5, 6, 1, 3, 4, 6, 7, 9, 1000, 3, 2, 4, 6, 66, 4, 3, 32, 454, 4, 99 }; List list(a, sizeof(a) / sizeof(int)); list.Bul(); list.Printf(); return 0; }
相关文章推荐
- 黑马程序员-OC语言基础:面向对象语法 一
- 黑马程序员-C语言基础九:指针
- 黑马程序员-C语言基础八:数组、字符串
- C++ const限定符
- leetcode 日经贴,Cpp code -Basic Calculator
- 使用C++11的可变参数模板改造单例模式
- 黑马程序员-C语言基础二:数据类型、常量、变量
- C++关键字 inline
- 黑马程序员-C语言基础一:关键字、标识符、注释
- HDU 1875
- 【C语言的日常实践(十六)】字符串输出功能puts、fputs和printf
- HDU 1233
- POJ 1258
- POJ 1751
- POJ 2349
- ZOJ 1586
- POJ 2421
- POJ 2031
- POJ 1287
- POJ 1251