您的位置:首页 > 其它

直接插入排序

2016-04-10 17:22 176 查看
思想:(见图)



方法一:

直接上代码:

void InsertSort(int *a,int size)
{
assert(a);
int i, j, tmp;
for (i = 0; i < size-1; ++i)
{
tmp = a[i + 1];
for (j = i; j >= 0; --j)   //在有序序列中插入后来数
{
if (a[j] > tmp)
{
a[j+1] = a[j];
}
else
{
break;
}
}
a[j+1] = tmp;//原来时上边的J最后又减了一个
}
}
方法二:

其实是一个有问题的程序,因为出现数组下标是负数了,源于功能能实现,所以摆放于此

//很可笑的一个问题
void InsertSort(int *a,int size)
{
assert(a);
int i, j, tmp;
for (i = 0; i < size-1; ++i)
{
tmp = a[i + 1];
for (j = i; j >= -1; --j)
{
if (a[j] > tmp)          //[j] j尽然成负数了
{
a[j+1] = a[j];
}
else
{
a[j + 1] = tmp;
break;
}

}
}
}
方法三:

//下面就是对的
void InsertSort(int a[], int len)
{
int i, j, temp;
for (i = 1; i<len; i++)
{
if (a[i]<a[i - 1])
{
temp = a[i];
for (j = i - 1; a[j]>temp; j--)
a[j + 1] = a[j];
a[j + 1] = temp;
}
}
}


方法四:

end为有序序列最后一个元素下标

void InsertSort(int *a, int size)
{
assert(a);
for (int i = 1; i < size; ++i)
{
int index = i;
int tmp = a[index];
int end = index - 1;
while (end >= 0 && tmp < a[end])
{
a[end + 1] = a[end];
--end;
}
a[end + 1] = tmp; //这里end加一是因为上边多减得一个
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: