插入排序

#include "stdafx.h"

#include <iostream>

/直接插入排序
void InsertSort(int p[],int length)

{

int i,j,temp;

for(i=0;i<length;i++)

{

temp=p[i];

j=i-1;

while(temp<p[j])

{

p[j+1]=p[j];

j--;

}

p[j+1]=temp;

}

cout<<"直接插入排序为:";
for(i=0;i<length;i++)
{cout<<p[i]<<" ";}
cout<<endl;

}

折半插入排序///

void HInsertSort(int s[],int length)
{//对顺序表s进行折半插入排序,结果是s由无序到有序
int i,j,low,high,mid;
for(i=1;i<length;i++)
{
s[0]=s[i]; //保存待插入元素
low=1;high=i-1; //设置初始区间
while(low<=high) //该循环语句完成确定插入位置
{
mid=(low+high)/2;
if(s[0]>s[mid])
low=mid+1; //插入位置在高半区中
else
high=mid-1; //插入位置在低半区中
}
for(j=i-1;j>=high+1;j--) //high+1为插入位置
s[j+1]=s[j]; //后移元素,留出插入空位
s[high+1]=s[0]; //将元素插入
}
cout<<"折半插入排序为:";
for(i=1;i<length;i++)
{cout<<s[i]<<" ";}
cout<<endl;
}

希尔排序///
void shell(int s[],int length)//希尔排序
{
int i,j,k,temp;
  k=length/2;
while(k>=1)
{
for(i=k+1;i<=length;i++)
{
temp=s[i];
j=i-k;
while((s[j]>temp)&&(j>=0))
{
s[j+k]=s[j];
j=j-k;
}
s[j+k]=temp;
}
k=k/2;
}
for(i=0;i<length;i++)
{s[i]=s[i+1];}
cout<<"希尔排序为:";
for(i=0;i<length;i++)
{
cout<<s[i]<<" ";
}
}

int _tmain(int argc, _TCHAR* argv[])
{

        int a[]={0,20,18,30,10,5,1,40,25,50};
InsertSort(a,1  0);//直接插入排序
int b[]={90,20,18,30,10,5,1,40,25,50};//第一个元素值为哨兵位
HInsertSort(b,10);//折半插入排序
int c[]={32,10,13,16,55,12,90,51,30,23};//希尔排序
shell(c,10);

system("pause");
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值