一,实验目的
掌握常用的排序方法,并掌握用c语言或C++实现排序的方法;
深刻理解排序的定义和各种排序方法的特点,并能加以灵活应用;
了解各种方法的排序过程及其依据的原则,并掌握各种排序方法的时间复杂度的分析方法。 二,实验内容
给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法:
按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次;
按名次列出每个学生的姓名与分数。
用直接插入排序输出名次
用快速排序输出名次
用选择排序输出名次 三,实验代码
#include
#include
typedef int KeyType;
typedef int InfoType;
typedef struct
{
KeyType key;
InfoType otherinfo;
}RedType;
#define MAXSIZE 20
typedef struct
{
RedType r[MAXSIZE+1];
int length;
}SqList;
void print(SqList L)
{
int i;
for(i = 1; i <= L.length; i++)
printf("(%d, %d) ", L.r[i].key, L.r[i].otherinfo);
printf("\n\n");
}
void InsertSort(SqList *L)
{
int i, j;
for( i = 2; i <= (*L).length; ++i)
if((*L).r[i].key < (*L).r[i-1].key)
{
(*L).r[0] = (*L).r[i];
for(j = i-1; (*L).r[0].key < (*L).r[j].key; --j)
(*L).r[j+1]=(*L).r[j];
(*L).r[j+1] = (*L).r[0];
print(*L);
}
}
int main()
{
RedType d[N] = {
{ 49, 1}, { 38, 2}, { 65, 3}, { 97, 4},
{ 76, 5}, { 13, 6}, { 27, 7}, { 49, 8}
};
SqList L;
int i;
int dt[T] = { 5, 3, 1};
for(i = 0; i < N; i++)
L.r[i+1]=d[i];
L.length = N;
printf("qian:\n");
print(L);
printf("zhong\n");
InsertSort(&L);
printf("hou:\n");
print(L);
return 0;
}
#include"stdio.h"
typedef int KeyType;
typedef int InfoType;
typedef struct
{
KeyType key;
InfoType otherinfo;
}RedType;
#define MAXSIZE 20
typedef struct
{
RedType r[MAXSIZE+1];
int length;
}SqList;
void print(SqList L)
{
int i;
for(i = 1; i <= L.length; i++)
printf("(%d, %d) ", L.r[i].key, L.r[i].otherinfo);
printf("\n\n");
}
int Partition(SqList *L,int low,int high)
{
RedType t;
KeyType pivotkey;
pivotkey=(*L).r[low].key;
while(low
{
while(low=pivotkey)
--high;
t=(*L).r[low];
(*L).r[low]=(*L).r[high];
(*L).r[high]=t;
while(low
++low;
t=(*L).r[low];
(*L).r[low]=(*L).r[high];
(*L).r[high]=t;
}
return low;
}
#define N 8
int main()
{
RedType d[N] = {
{ 49, 1}, { 38, 2}, { 65, 3}, { 97, 4},
{ 76, 5}, { 13,6}, { 27, 7}, { 49, 8}
};
SqList l;
int i;
for(i=0;i
l.r[i+1]=d[i];
l.length = N;
printf("qian:\n");
print(l);
QuickSort(&l);
printf("hou:\n");
print(l);
return 0;
}
#include
#include
#include
#include
typedef struct
{
int key;
int otherinfo;
}RedType;
#define MAXSIZE 30
typedef struct
{
RedType r[MAXSIZE+1];
int length;
}SqList;
void print(SqList L)
{
int i;
for(i = 1; i <= L.length; i++)
printf("(%d, %d) ", L.r[i].key, L.r[i].otherinfo);
printf("\n\n");
}
int SelectMinKey(SqList L,int i)
{
int min;
int j,k;
k=i;
min=L.r[i].key;
for(j=i+1;j<=L.length;j++)
if(L.r[j].key
{
k=j;
min=L.r[j].key;
}
return k;
}
void SelectSort(SqList *L)
{
int i,j;
RedType t;
for(i=1;i
{
j=SelectMinKey(*L,i);
if(i!=j)
{
t=(*L).r[i];
(*L).r[i]=(*L).r[j];
(*L).r[j]=t;
}
}
}
#define N 8
int main()
{
RedType d[N] = {
{ 49, 1}, { 38, 2}, { 65, 3}, { 97, 4},
{ 76, 5}, { 13, 6}, { 27, 7}, { 49, 8}
};
SqList l;
int i;
for(i=0;i
l.r[i+1]=d[i];
l.length=N;
printf("qian:\n");
print(l);
SelectSort(&l);
printf("hou:\n");
print(l);
return 0;
}