1、插入排序
#include<stdio.h>
typedef struct
{
char *name;
int score;
} student;
void insert_sort (student *a,int size);
int main()
{
int i;
student a[5];
a[0].name="Jim";
a[0].score=89;
a[1].name="Jack";
a[1].score=80;
a[2].name="Rose";
a[2].score=95;
a[3].name="Brown";
a[3].score=54;
a[4].name="Tom";
a[4].score=98;
for(i=0;i<5;i++)
{
printf("%s:%d\n",a[i].name,a[i].score);
}
printf("After Sorted:\n");
insert_sort(a,5);
for(i=0;i<5;i++)
{
printf("%s:%d\n",a[i].name,a[i].score);
}
}
void insert_sort (student *a,int size)
{
int i,j;
student tmp;
for(i=0;i<size;i++)
for(j=i;j<size;j++)
{
if((a+j)->score<(a+i)->score)
{
tmp=a[j];
a[j]=a[i];
a[i]=tmp;
}
}
}
2、冒泡排序
#include <stdio.h>
/*定义结构体student*/
typedef struct
{
char *name;
int score;
}student;
/*声明函数BubbleSort()*/
void BubbleSort(student *a,int size);
void main()
{
int i;
/*初始化结构体student*/
student a[5];
a[0].name="Tom";
a[0].score=67;
a[1].name="Jack";
a[1].score=87;
a[2].name="Alice";
a[2].score=89;
a[3].name="Ella";
a[3].score=90;
a[4].name="Einstain";
a[4].score=89;
for(i=0;i<5;i++)
{
printf("%s:%d\n",a[i].name,a[i].score);
}
printf("after sort:\n");
/*调用函数BubbleSort*/
BubbleSort(a,5);
for(i=0;i<5;i++)
{
printf("%s:%d\n",a[i].name,a[i].score);
}
}
/*定义函数BublleSort()*/
void BubbleSort(student *a,int size)
{
int i,j;
student tmp;
for(i=0;i<size;i++)
for(j=size-1;j>=i;j--)
{
if((a[j].score<a[j-1].score))
{
tmp=a[j];
a[j]=a[j-1];
a[j-1]=tmp;
}
}
}
3、希尔排序
#include <stdio.h>
/*定义结构体struct*/
typedef struct
{
char *name;
int score;
}student;
/*声明函数shell_sort*/
void shell_sort(student *a,int d,int n);
void main()
{
int i;
/*初始化结构体student*/
student a[10];
a[0].name="Jim";
a[0].score=49;
a[1].name="Tom";
a[1].score=38;
a[2].name="Jack";
a[2].score=65;
a[3].name="Jimmy";
a[3].score=97;
a[4].name="Ella";
a[4].score=76;
a[5].name="Jax";
a[5].score=13;
a[6].name="Tank";
a[6].score=27;
a[7].name="Alice";
a[7].score=49;
a[8].name="Tim";
a[8].score=55;
a[9].name="lily";
a[9].score=14;
for(i=0;i<10;i++)
{
printf("%s:%d\n",a[i].name,a[i].score);
}
printf("after score:\n");
shell_sort(a,5,10);
shell_sort(a,3,10);
shell_sort(a,2,10);
shell_sort(a,1,10);
for(i=0;i<10;i++)
{
printf("%s:%d\n",a[i].name,a[i].score);
}
}
void shell_sort(student *a,int d,int n)
{
int i,j;
for(i=d+1;i<=n;i++)
if(a[i].score<a[i-d].score)
{
a[0]=a[i];
j=i-d;
do{
a[j+d]=a[j];
j=j-d;
}
while(j>0&&a[0].score<a[j].score);
a[j+d]=a[0];
}
}