1 void rank_list(SqList &L) 2 { 3 student p; 4 int i,j; 5 for( i=1;i<L.length;++i) 6 if(L.elem[i].average>L.elem[i-1].average) 7 { 8 p=L.elem[i]; 9 L.elem[i]=L.elem[i-1]; //赋值的都是地址 10 for( j=i-1;j>=0&&L.elem[i].average<L.elem[j].average;--j)//老师说这块是j=i-2,但是i从1开始 11 L.elem[j+1]=L.elem[j]; 12 L.elem[j+1]=p; 13 } 14 15 student *t; 16 i=0; 17 for(t=L.elem;t<L.elem+L.length;t++) //给order赋值 18 { 19 L.elem[i].order=i+1; 20 i++; 21 } 22 /* 23 //折半插入排序 24 student p; 25 int i,j,low,high,mid; 26 for(i=1;i<L.length;++i) 27 { 28 p=L.elem[i]; 29 low=0;high=i-1; 30 while(low<=high) 31 { 32 mid=(low+high)/2; 33 if(L.elem[i].average>L.elem[mid].average) 34 high=mid-1; 35 else 36 low=mid+1; 37 } 38 for(j=i-1;j>=high+1;--j) 39 L.elem[j+1]=L.elem[j]; 40 L.elem[high+1]=p; 41 } 42 student *t; 43 i=0; 44 for(t=L.elem;t<L.elem+L.length;t++) //给order赋值 45 { 46 L.elem[i].order=i+1; 47 i++; 48 } 49 50 希尔排序 51 int i,j,gap; 52 for(gap=L.length/2;gap>0;gap/=2) 53 for(i=gap;i<L.length;i++) 54 for(j=i-gap;j>=0&&L.elem[j].average<L.elem[gap+j].average;j-=gap) 55 { 56 student p; 57 p=L.elem[j]; 58 L.elem[j]=L.elem[j+gap]; 59 L.elem[j+gap]=p; 60 } 61 62 冒泡排序 63 student *p,*q; 64 p=L.elem;q=L.elem; 65 for(p;p<L.elem+L.length;p++) 66 { 67 for(q=p;q<L.elem+L.length-1;q++) 68 { 69 if(q->average<(q+1)->average) 70 { 71 student t; //这块必须这么写,不然排不好,队成员一个一个换太麻烦 72 t=*q; 73 *q=*(q+1); 74 *(q+1)=t; 75 } 76 } 77 } 78 79 80 student *t; 81 i=0; 82 for(t=L.elem;t<L.elem+L.length;t++) //给order赋值 83 { 84 L.elem[i].order=i+1; 85 i++; 86 } 87 } 88 89 快排 90 void quick_sort(SqList &L,int l,int r) 91 { 92 int i,j; 93 if(r<l) 94 { 95 j=0;r=L.length;int x=L.elem[l].average; 96 while(i<j) 97 { 98 while(i<j&&L.elem[j].average>=x) 99 j--; 100 if(i<j) 101 L.elem[i++].average=L.elem[j].average; 102 while(i>j&&L.elem[i].average<x) 103 i++; 104 if(i<j) 105 L.elem[j--].average=L.elem[i].average; 106 } 107 L.elem[i].average=x; 108 quick_sort(L,l,i-1); 109 quick_sort(L,i+1,r); 110 } 111 }
void rank_list(SqList &L)
{
student p;
int i,j;
for( i=1;i<L.length;++i)
if(L.elem[i].average>L.elem[i-1].average)
{
p=L.elem[i];
L.elem[i]=L.elem[i-1]; //赋值的都是地址
for( j=i-1;j>=0&&L.elem[i].average<L.elem[j].average;--j)//老师说这块是j=i-2,但是i从1开始
L.elem[j+1]=L.elem[j];
L.elem[j+1]=p;
}
student *t;
i=0;
for(t=L.elem;t<L.elem+L.length;t++) //给order赋值
{
L.elem[i].order=i+1;
i++;
}
/*
//折半插入排序
student p;
int i,j,low,high,mid;
for(i=1;i<L.length;++i)
{
p=L.elem[i];
low=0;high=i-1;
while(low<=high)
{
mid=(low+high)/2;
if(L.elem[i].average>L.elem[mid].average)
high=mid-1;
else
low=mid+1;
}
for(j=i-1;j>=high+1;--j)
L.elem[j+1]=L.elem[j];
L.elem[high+1]=p;
}
student *t;
i=0;
for(t=L.elem;t<L.elem+L.length;t++) //给order赋值
{
L.elem[i].order=i+1;
i++;
}
希尔排序
int i,j,gap;
for(gap=L.length/2;gap>0;gap/=2)
for(i=gap;i<L.length;i++)
for(j=i-gap;j>=0&&L.elem[j].average<L.elem[gap+j].average;j-=gap)
{
student p;
p=L.elem[j];
L.elem[j]=L.elem[j+gap];
L.elem[j+gap]=p;
}
冒泡排序
student *p,*q;
p=L.elem;q=L.elem;
for(p;p<L.elem+L.length;p++)
{
for(q=p;q<L.elem+L.length-1;q++)
{
if(q->average<(q+1)->average)
{
student t; //这块必须这么写,不然排不好,队成员一个一个换太麻烦
t=*q;
*q=*(q+1);
*(q+1)=t;
}
}
}
student *t;
i=0;
for(t=L.elem;t<L.elem+L.length;t++) //给order赋值
{
L.elem[i].order=i+1;
i++;
}
}
快排
void quick_sort(SqList &L,int l,int r)
{
int i,j;
if(r<l)
{
j=0;r=L.length;int x=L.elem[l].average;
while(i<j)
{
while(i<j&&L.elem[j].average>=x)
j--;
if(i<j)
L.elem[i++].average=L.elem[j].average;
while(i>j&&L.elem[i].average<x)
i++;
if(i<j)
L.elem[j--].average=L.elem[i].average;
}
L.elem[i].average=x;
quick_sort(L,l,i-1);
quick_sort(L,i+1,r);
}
}