A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© koukou 中级黑马   /  2014-6-7 17:14  /  1682 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

void BiInsertsort(int r[], int n)                 //插入排序(折半)
{
for(int i=2;i<=n;i++)
{
  if (r[i]<r[i-1])
       {
    r[0] = r[i];   //设置哨兵   
    int low=1,high=i-1;            //折半查找
    while (low<=high)
    {
    int mid=(low+high)/2;
    if (r[0]<r[mid])    high=mid-1;
    else    low = mid+1;
     }
    int j;
    for (j=i-1;j>high;j--)    r[j+1] = r[j];   //后移
    r[j+1] = r[0];
         }
}
for(int k=1;k<=n;k++)     cout<<r[k]<<" ";   
cout<<"\n";
}void ShellSort ( int r[], int n)   //希尔排序
{
    for(int d=n/2;d>=1;d=d/2)   //以d为增量进行直接插入排序
  {
        for (int i=d+1;i<=n;i++)  
        {
    r[0] = r[i];   //暂存被插入记录
    int j;
    for( j=i-d; j>0 && r[0]<r[j]; j=j-d)  r[j+d] = r[j];  //记录后移d个位置
    r[j+d] = r[0];
            
      }
   }
   for(int i=1;i<=n;i++)       cout<<r[i]<<" ";
      cout<<"\n";
}void BubbleSort(int r[], int n)   //起泡排序
{
int temp,exchange,bound;
    exchange=n;                       //第一趟起泡排序的范围是r[0]到r[n-1]
while (exchange)                    //仅当上一趟排序有记录交换才进行本趟排序
{
  bound=exchange;
  exchange=0;  
     for (int j=1; j<bound; j++)     //一趟起泡排序
     if (r[j]>r[j+1])
  {
    temp=r[j];
    r[j]=r[j+1];
    r[j+1]=temp;
    exchange=j;                   //记录每一次发生记录交换的位置
      }
}
for(int i=1;i<=n;i++)       cout<<r[i]<<" ";
    cout<<"\n";
}

2 个回复

倒序浏览
这样不是显得很乱么,下次用插入代码格式吧!
回复 使用道具 举报
多谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马