简单选择排序
思想:
过程:
顺序存储
//简单选择排序
#include<stdio.h>
int SimpleSelect(int a[],int n)
{
int i,j,k;
int t;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i;j<n;j++)
{
if(a[j]<a[k])
{
k=j;
}
}
if(k!=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
}
int main()
{
int a[20];int n;
printf("请输入n个待排序元素(20个以内):N=");
scanf("%d",&n);
printf("请输入%d个待排序元素\n",n);
int i;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
SimpleSelect(a, n);
for(i=0;i<n;i++)
{
printf("%5d",a[i]);
}
}
运行
链式存储
//链式结构简单选择排序
//创建单链表
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}Lnode,*Linklist;
//单链表初始化,定义一个Linklist(Lnode*)型函数,由其带回头指针地址
Linklist InitList()
{
Lnode *L;
L=(Lnode*)malloc(sizeof(Lnode));
if(L==NULL)
{
printf("申请空间失败\n");
exit(0);
}
L->next ==NULL;
return L;
}
//尾插法创建单链表,亦步亦趋
void CreatList(Linklist L)
{
Lnode *s,*r=L;
int i,n,num;
printf("请输入元素个数n:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&num);
s=(Lnode*)malloc(sizeof(Lnode));
s->data =num;
r->next=s;
r=s;
}
r->next=NULL;
}
//判断单链表长度
int LongthList(Linklist L)
{
int i=0;
Lnode *p;
p=L->next;//带头结点的单链表,头结点按第0个节点算
while(p!=NULL)
{
p=p->next;
i++;
}
return i;
}
//遍历单链表
void PrintList(Linklist L)
{
Lnode *p;
p=L->next;
while(p!=NULL)
{
printf("%d\n",p->data);
p=p->next;
}
}
//简单选择排序
void LinkSimplesort(Linklist L)
{
Lnode *p,*q,*s;
int min,t;
p=L->next;
q=p->next;
while(p)
{
min=p->data;s=p;
q=p->next;
while(q)
{
if(q->data<min)
{
s=q;
}
q=q->next;
}
if(s!=p)
{
t=p->data;
p->data=s->data;
s->data=t;
}
p=p->next;
}
}
int main()
{
Linklist S;int l;
S=InitList();
CreatList(S);
l=LongthList(S);
printf("链表长为%d\n",l);
PrintList(S);
LinkSimplesort(S);
printf("排序为\n");
PrintList(S);
}
运行截图: