选择排序为一简单排序算法,虽其简单,清楚一些基础的排序算法对我们有益无害。如有错误,不吝赐教。
所有内容都是自己理解,不是网上摘抄。我最近新开通了自己的CSDN博客,希望以后有时间把自己在学习过程中的理解和大家分享。
下面讲下两种方法实现选择排序,顺序存储结构和链式存储结构
(1)、顺序存储结构
sort1(int R[],int n)
{
int i,j,k,temp;
for(i=0;i<n-1;i++) //由小到大排序,先从第一个开始,到n结束,循环n次
{
k=i;
for(j=i+1;j<n;j++)
if(R[j]<R[k]) k=j; //从第一个开始找,找到最小的那个,如5,3,4,1,2 找到最小的那个R[3]=1;k为最小的那个数的下标
if(k!=i) //把相应的最小的那个数替换到前面,如把R[3]=1,就把它选择到第一个位置R[0]处,R[3]=R[1];
{
temp=R[i];
R[i]=R[k];
R[k]=temp;
}
}
}
(2)、链式存储结构
typedef struct node
{
int data; //数据域
struct node *next;//指针域
}Slink;
sort2(Slink *head) //带头结点的链表
{
Slink *p=head->next,*q,*r; //指针p指向第一个结点
int temp;
while(p)
{
q=p; //开始时q指向第一个结点
r=p->next; //开始时r指向第二个
while(r)
{
if(r->data<q->data) q=r; //q总是保留最小的数值
r=r->next;
}
if(q!=p)
{
temp=p->data;
p->data=q->data;
q->data=temp;
}//交换值
p=p->next;//继续找第二个最小数
}
}
总结: 仔细比较你会发现,链式存储其实和顺序存储的算法是一样的,只是实现的代码不同,如果我们搞懂了顺序存储,加之你对链式存储的结构很了解,很容易就可以转换一下。