//数组实现
#include<stdio.h>
#include<stdlib.h>
#define N 8
void Sortarray(int *a)
{
int i,j,k,t;
for(i=0;i<N-1;i++){
k=i;
for(j=k+1;j<N;j++){
if(a[k]>a[j]){//找到最小元素的下标
k=j;
}
}
t=a[i];//交换元素
a[i]=a[k];
a[k]=t;
}
}
void Printarray(int *a)
{
for(int i=0;i<N;i++)
{
printf("%5d",*(a+i));
}
}
int main()
{
int i;
int *a;
a=(int *)malloc(N*sizeof(int));
printf("Pleas input the s[i]:");
for(i=0;i<N;i++)
{
scanf("%d",a+i);
}
Sortarray(a);
Printarray(a);
return 0;
}
//链表(降序) 头插法
#include<stdio.h>
#include<stdlib.h>
#define N 8
typedef struct node{
int data;
struct node *next;
}ElemSN;
ElemSN *Createlink(int *a)
{
ElemSN *h=NULL,*np;
for(int i=N-1;i>=0;i--)
{//逆向建链
np=(ElemSN *)malloc(sizeof(ElemSN));
np->data=a[i];
np->next=h;
h=np;
}
return h;
}
ElemSN *Sortlink(ElemSN *head)
{
ElemSN *q,*p,*pm,*qm,*h=NULL;
while(head)
{
for(q=pm=head,p=head->next;p;q=p,p=p->next){
if(p->data<pm->data)
{//找到有最小值的结点
pm=p;
qm=q;
}
}
if(pm!=head)
{//挂链
qm->next=pm->next;
}
else{//挪头指针
head=head->next;
}//头插
pm->next=h;
h=pm;
}
return h;
}
void Printlink(ElemSN *head)
{
ElemSN *p;
for(p=head;p;p=p->next){
printf("%d",p->data);
}
}
int main()
{
int i;
int *a;
ElemSN *head=NULL;
a=(int *)malloc(N*sizeof(int));
printf("Please input a[i]:");
for(i=0;i<N;i++)
{
scanf("%d",a+i);
}
//创建链表
head=Createlink(a);
//调用函数
head=Sortlink(head);
//输出链表
Printlink(head);
return 0;
}
//链表(升序) 尾插法
#include<stdio.h>
#include<stdlib.h>
#define N 8
typedef struct node{
int data;
struct node *next;
}ElemSN;
ElemSN *Createlink(int *a)
{
ElemSN *h=NULL,*np;
for(int i=N-1;i>=0;i--)
{//逆向建链
np=(ElemSN *)malloc(sizeof(ElemSN));
np->data=a[i];
np->next=h;
h=np;
}
return h;
}
ElemSN *Sortlink(ElemSN *head)
{
ElemSN *q,*p,*pm,*qm,*h=NULL,*tail;
while(head)
{
for(q=pm=head,p=head->next;p;q=p,p=p->next){
if(p->data<pm->data)
{//找到最小值结点
pm=p;
qm=q;
}
}
if(pm!=head)
{//挂链
qm->next=pm->next;
}
else{//挪头指针
head=head->next;
}
pm->next=NULL;//要尾插的结点指针域赋空
if(!h)
{//新头指针指上来
h=tail=pm;
}
else{//挂链挪动指针
tail=tail->next=pm;
}
}
return h;
}
void Printlink(ElemSN *head)
{
ElemSN *p;
for(p=head;p;p=p->next){
printf("%d",p->data);
}
}
int main()
{
int i;
int *a;
ElemSN *head=NULL;
a=(int *)malloc(N*sizeof(int));
printf("Please input a[i]:");
for(i=0;i<N;i++)
{
scanf("%d",a+i);
}
//创建链表
head=Createlink(a);
//调用函数
head=Sortlink(head);
//输出链表
Printlink(head);
return 0;
}