链表选择排序

来源:互联网 发布:瓦尔登湖 知乎 译本 编辑:程序博客网 时间:2024/06/06 08:46
#include <iostream>#include <cmath>using namespace std;struct node{int _val;node* _next;node(int t=0, node* p=0){_val = t;_next = p;}};typedef node* link;void insert_node(link &h, int t){if (0 == h){h = new node(t);return;}link p = new node(t, h);h = p;}// with head nodelink find_max(link h){if (0 == h || 0 == h->_next) return h;link t = h;while(0 != h->_next){if (t->_next->_val < h->_next->_val)t = h;h = h->_next;}return t;}link select_sort_list(link h){if (0 == h || 0 == h->_next) return h;node dummy(0, h);link head = &dummy;link t = 0;link p = 0;while(head->_next != 0){t = find_max(head);link pp = t->_next->_next;t->_next->_next = p;p = t->_next;t->_next = pp;}return p;}int main(int argc, char* argv[]){link h = 0;for (int i=0; i<20; ++i)insert_node(h,rand()%100+10);link ret = select_sort_list(h);while(ret != 0){cout<<ret->_val<<endl;ret = ret->_next;}return 0;}