随笔 - 13, 文章 - 18, 评论 - 18, 引用 - 0
数据加载中……

几种排序算法

1)顺序表选择排序
 
void ss_sort(int e[], int n)
{
   int i,j,k,t;
   for(i=0; i<n-1; i++)
  {
     for(k=i, j=i+1; j<n; j++)
    {
      if( e[k] > e[j] )
         k=j;
    }
 
      if(k!=i)
      {
        t=e[i]; e[i]=e[k]; e[k]=t;
      }
  }
}
 
选择排序 共比较n(n-1)/2次,  不稳定排序,如果相等的数,可能交换位置。
 
1-1) 堆排序
 
渗透函数
void sift(int e[], int n, int s)
{
   int t,k,j;
   t = e[s];
   k=s;
   j = 2*k +1;
   while(j<n)
  {
    if(j<n-1 && e[j]<e[j+1])
     j++;
    if(t<e[j])
    {
      e[k]=e[j];
      k=j;
      j=2*k+1;
    }
    else
       break;
  }
   e[k]= t;
}
 
void heapsort(int e[], int n)
{
   int i,k,t;
   for(i=n/2-1; i>=0; i--)
  {
    sift(e,n,i);
  }
 
   for(k=n-1; k>=1; k--)
   {
     t=e[0];
     e[0]=e[k];
     e[k]=t;
     sift(e,k,0);
   }
}
 
 
 
2)顺序表直接插入排序
 
void insert_sort(int e[],int n)
{
   int i,j;
   int temp;
   for(i=1; i<n; i++)
   {
      temp = e[i];
      j =i ;
      while( j>0 && temp>e[j-1])
      {
        e[j] = e[j-1];
        j--;
      }
      e[j] = temp;
   }
}
 
直接插入排序 比较次数最少为n-1次, 最多为n(n-1)/2次,稳定排序
对与原来排好的序列排序效率高
 
2-1) 希尔排序
void shell(int e[], int n)
{
  int j, k, h, y;
  for(h=n/2; h>0; h=h/2)
  {
    for(j=h; j<n; j++)
    {
      y= e[j];
      for(k=j-h; k>=0 && y<e[k] ; k-=h)
      {
        e[k+h] = e[k];
      }
      e[k+h] = y;
    }
  }
}
 
 
3)冒泡排序
void mp_sort(int e[], int n)
{
  int j,p,h,t;
  for(h=n-1; h>0; h=p)
  {
    for(p=j=0; j<h; j++)
    {
      if(e[j]>e[j+1])
      {
        t = e[j];
        e[j]=e[j+1];
        e[j+1]= t;
        p = j;
      }
    }
  }
}
 
4)快速排序
void r_quick(int e[], int low, int high)
{
   int i, j, t;
   if(low<high)
   {
      i =low; j = high; t= e[low];
      while(i<j)
      {
        while(i<j && e[j]>t ) j--;
        if(i<j)
          e[i++]=e[j];
        while(i<j && e[i]<=t) i++;
         if(i<j)
           e[j--]=e[i];
      }
   e[i]=t;
   r_quick(e,low, i-1);
   r_quick(e,i+1,high);
  }
}

posted on 2007-02-03 10:12 JackLi 阅读(234) 评论(0)  编辑 收藏 引用 所属分类: Examination


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理