插入排序,折半插入排序,希尔排序的代码

#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

void Insertsort(int A[],int n)
{
    int i,j;
    for( i=2;i<n;i++){   //依次将失序序列插入前面有序序列
        if(A[i]<A[i-1])
            A[0]=A[i];      //A0是待插入的元素
            for( j=i-1;A[j]>A[0];j--)  //将有序序列依次后移
             {
                 A[j+1]=A[j];
             }
             A[j+1]=A[0];//元素插入其位置
    }
}

void HalfInsert(int A[],int n)
{
    int i,j,low,high;

    for(i=2;i<=n;i++){
        A[0]=A[i];
        low=1,high=i-1;
        while(low<high){

           int  mid=(low+high)/2;//取中间点

                if(A[0]<A[mid])  //确定在哪个区间找
                    high=mid-1;
                else
                    low=mid+1;
            }

        for(int j=i-1;j>=high+1;j--)//将有序区间的元素后移
            A[j+1]=A[j];

      A[high+1]=A[0];   //插入操作
      }

}
void ShellSort(int A[],int n)
{

    for(int delt=n/2;delt>1;delt/=2) //步长变化

        for(int i=delt+1;i<=n;i++)

          if(A[i]<A[i-delt]){    //将要执行插入操作
               A[0]=A[i];

              int j;
              for(j=i-delt;j>0&&A[0]<A[j];j-=delt)
                   A[j+delt]=A[j];//某趟的shell序列后移

            A[j+delt]=A[0]; //插入操作
          }
}
void num_rand(int A[],int N){

      srand(time(0));
    for(int i=0;i<N;i++)
        A[i]=rand()%50;

}
void num_copy(int A[],int B[],int N)
{
    for(int i=0;i<N;i++)
        B[i]=A[i];
}
void  matrix_out(int A[],int n,bool mark){

    for(int j=0;j<n;j++)
        cout<<A[j]<<" ";
    cout<<endl;
}
int main()
{

    const int num_count=15;
    int A[num_count],B[num_count];
    //生成序列
    num_rand(A,num_count);

    cout<<"插入排序:"<<endl;
    num_copy(A,B,num_count);
    matrix_out(B,num_count,1);
    Insertsort(B,num_count);
    matrix_out(B,num_count,0);
    cout<<endl<<endl<<endl;

    cout<<"折半插入排序:"<<endl;
    num_copy(A,B,num_count);
    matrix_out(B,num_count,1);
    HalfInsert(B,num_count);
    matrix_out(B,num_count,0);
    cout<<endl<<endl<<endl;

    cout<<"希尔排序:"<<endl;
    num_copy(A,B,num_count);
    matrix_out(B,num_count,1);
    ShellSort(B,num_count);
    matrix_out(B,num_count,0);
    cout<<endl<<endl<<endl;

    return 0;
}
这个代码是不对的。尤其希尔排序和折半插入排序,严老师骗我。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值