#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;
}
链表选择排序
最新推荐文章于 2020-10-22 15:03:01 发布