几大排序算法(选择,插入)

  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);
	}
}

  

posted @ 2016-03-30 16:40  请叫我凯凯大人  阅读(264)  评论(0编辑  收藏  举报