码迷,mamicode.com
首页 > 编程语言 > 详细

选择排序

时间:2014-10-10 21:50:04      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:cc++   算法   

选择排序(假设递增排序)

每次选取从当前结点到末尾结点中最小的一个与当前结点交换,每一轮固定一个元素位置。

时间复杂度O(n^2),空间复杂度O(1)。下面的示例代码以带头结点的链表为存储结构:

#include<stdio.h>
#include<stdlib.h>
#define Elemtype double
struct Node
{
	Elemtype data;
	struct Node *next;
};
void listsort(Node*h)
{
	Node*p=h->next;
	while(p!=NULL)
	{
		Node*q=p;
		Node*k=p;
		Elemtype min=p->data;
		while(q!=NULL)
		{
			if(min>q->data)
			{
				min=q->data;
				k=q;
			}
			q=q->next;
		}
		Elemtype tmp=p->data;
		p->data=k->data;
		k->data=tmp;
		p=p->next;
	}
}
int main()
{
	Node*h=(Node*)malloc(sizeof(Node));
	h->next=NULL;
	for(int i=0;i<10;i++)
	{
		Node*p=(Node*)malloc(sizeof(Node));
		scanf("%lf",&p->data);
		p->next=h->next;
		h->next=p;
	}
	listsort(h);
	Node*q=h->next;
	while(q!=NULL)
	{
		printf("%lf\n",q->data);
		q=q->next;
	}
	return 0;
}


选择排序

标签:cc++   算法   

原文地址:http://blog.csdn.net/u010839382/article/details/39968685

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!