您的位置:首页 > 理论基础 > 数据结构算法

算法和数据结构---排序---插入排序

2012-07-20 23:55 176 查看
直接插入排序

int insertsort(int x[],int n)
{
int i,j,t;
for(i=0;i<n;i++)
{
t=x[i];
for(j=i;j>=0&&x[j-1]>t;j--)
{
x[j]=x[j-1];
}
x[j]=t;
}
}


折半插入

void BiInsertionSort(SqList &L){
//对顺序表L作折半插入排序
for(i=2; i<=L.length; ++i){
L.r[0] = L.r[i];
low = 1;
high = i-1;

//查找i记录应该插入的位置,必定是high+1的位置从而high+1位置以后的元素都应该往后移动一个位置,留出一个位置放入L.r[i]
while(low <= high){
mid = (low + high)/2;
if(LT(L.r[0], L.r[m].key))
high = m - 1;
else
low = m + 1;
}
//后移
for(j=i-1; j>=high+1; --j)
L.r[j+1] = L.r[j];
//插入元素
L.r[high+1] = L.r[0];
}
}


希尔排序

void ShellSort(SqList *L)
{
int i,j;
int increment=L->length;
do
{
increment=increment/3+1;            /* 增量序列 */
for(i=increment+1;i<=L->length;i++)
{
if (L->r[i]<L->r[i-increment])    /* 需将L->r[i]插入有序增量子表 */
{
L->r[0]=L->r[i];             /* 暂存在L->r[0] */
for(j=i-increment;j>0 && L->r[0]<L->r[j];j-=increment)
L->r[j+increment]=L->r[j]; /* 记录后移,查找插入位置 */
L->r[j+increment]=L->r[0]; /* 插入 */
}
}
}
while(increment>1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: