#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 node link 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; }