选择排序 分类: 算法 c/c++ 2014-10-10 20:32 509人阅读 评论(0) 收藏

时间:2023-03-09 06:39:56
选择排序                                                    分类:            算法             c/c++             2014-10-10 20:32    509人阅读    评论(0)    收藏

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

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

时间复杂度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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。