#include <stdio.h>
#include <string.h>
#define MAXITEM 100
typedef char KeyType[5];
typedef int ElemType;
typedef struct Rec
{
KeyType key; /*关键字域*/
ElemType data; /*数据域*/
} Elemnode[MAXITEM];
// 冒泡排序算法
void BubbleSort(Elemnode r,int n)
{
int i,j;
for(i=1;i<n;i++)
{
for(j=n;j>i;j--)
{
if(r[j].data<r[j-1].data)
{
r[0]=r[j];
r[j]=r[j-1];
r[j-1]=r[0];
}
}
}
}
// 快速排序算法
void QuickSort(Elemnode r,int s,int t) /*把r[s]至r[t]的元素进行快速排序*/
{
int i=s,j=t;
if(s<t)
{
r[0]=r[s];
while(i!=j)
{
while(j>i&&r[j].data>r[0].data)
j--;
r[i]=r[j];
while(i<j&&r[i].data<r[0].data)
i++;
r[j]=r[i];
}
r[i]=r[0];
QuickSort(r,s,i-1);
QuickSort(r,i+1,t);
}
}
// 直接选择排序算法
void SelectSort(Elemnode r,int n)
{
int i,j,k;
for(i=1;i<=n;i++)
{
k=i;
for(j=i+1;j<=n;j++)
{
if(r[j].data<r[k].data)
k=j;
}
if(k!=i)
{
r[0]=r[i];
r[i]=r[k];
r[k]=r[0];
}
}
}
//显示最后结果
void Display(Elemnode r,int n)
{
int i;
for (i=1;i<=n;i++)
{
printf(" %s \t",r[i].key);
}
printf("\n");
for (i=1;i<=n;i++)
{
printf(" %d \t",r[i].data);
}
printf("\n");
}
void main()
{
Elemnode s={{"",0},{"王华",87},{"李英",68},{"张萍",92},{"陈涛",88},{"刘丽",
61},{"章强",77},{"孙军",96},{"朱斌",80},{"许伟",72},{"曾亚",75}};
/*s[0]元素不计入元素个数,用于存储交换变量*/
int n=10;
printf("原始成绩如下:\n");
Display(s,n);
//BubbleSort(s,n);
QuickSort(s,0,n);
//SelectSort(s,n);
printf("\n成绩从低到高排列如下:\n");
Display(s,n);
}