回 帖 发 新 帖 刷新版面

主题:排序算法合集(如有别的,欢迎大家完善)

void   insertsort(int   a[],int   n)           //简单插入排序   
  {   
          int   i,j,k,t;   
          for(i=1;i<n;i++)   
          for(j=0;j<i;j++)   
          if(a[j]>a[i])   
          {   
                  t=a[i];   
                  for(k=i;k>j;k--)   a[k]=a[k-1];   
                  a[j]=t;   
                  break;   
          }   
  }   
    
  void   InsertSort(int   a[],int   n)           //折半插入排序   
  {   
          int   i,j,temp,low,high,m;   
  for(i=1;i<n;i++)   
  {   
          temp=a[i];   
          low=0;high=i-1;   
          while(low<=high)   
          {   
                  m=(low+high)/2;   
                  if(temp<a[m])   high=m-1;   
                  else   low=m+1;   
          }   
          for(j=i-1;j>=low;j--)   a[j+1]=a[j];   
          a[low]=temp;   
  }   
  }   
    
  typedef   struct{     //表插入排序(不需要移动元素   )   
          int   a;   
          int   next;               //指针,指向比a大一点的数   
    }slnode;   
    
  void   arrange(slnode   r[],int   n)   
  {   
          int   i,p,q;   
          slnode   t;   
          p=r[0].next;   
          for(i=1;i<n;i++)   
          {   
                while(p<i)   p=r[p].next;   
          q=r[p].next;                   //必须有   
          if(p!=i)   
          {   
                  t=r[p];r[p]=r[i];r[i]=t;   
                  r[i].next=p;   
          }   
          p=q;   
          }   
  }   
    

回复列表 (共22个回复)

21 楼

这就是排序算法合集????????????????????????????
那个快速排序我用得最多,LZ是抄书上的,我对其进行了优化,看看最简单的快速排序:
template < class T >
void QuickSort( T a[], int iSize )
{
    if ( iSize <= 1 ) return;

    int iEnd = iSize - 1;

    T bound = a[iSize / 2];

    Swap( a[0], a[iSize / 2] );

    int i = 1; 

    while ( i <= iEnd )
    {
        if ( a[i] > bound )
        {
            Swap( a[i], a[iEnd] );
            --iEnd;
        }
        else
        {
            ++i;
        }
    }
    Swap( a[0], a[i-1] );

    QuickSort( &a[0], i - 1 );

    QuickSort( &a[iEnd + 1], iSize - 1 - iEnd );
    
}

22 楼

辛苦啦~~顶~~
while(p<i)   p=r[p].next;
意思是当p<i成立,实现r[p]指向next的指针送给p,可以写成p=r[p]->next;

我来回复

您尚未登录,请登录后再回复。点此登录或注册