社区
C++ 语言
帖子详情
插入排序算法?
zero_226
2010-06-30 07:06:49
void insertSort(int*a, int n)
{
for(int i = 1; i < n; i++)
{
int temp = a[i];
for(int j = 0;(j < i) && (a[j] > temp); j++)
{
a[j + 1] = a[j];
}
a[j] = temp;
}
}
求大家帮我看下这段算法的问题在哪里,我觉得逻辑挺对的啊。
帮帮忙啊,同志们
...全文
131
11
打赏
收藏
插入排序算法?
void insertSort(int*a, int n) { for(int i = 1; i < n; i++) { int temp = a[i]; for(int j = 0;(j temp); j++) { a[j + 1] = a[j]; } a[j] = temp; } } 求大家帮我看下这段算法的问题在哪里,我觉得逻辑挺对的啊。 帮帮忙啊,同志们
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zero_226
2010-06-30
打赏
举报
回复
非常感谢冒险王以及各位!
lizhi200404520
2010-06-30
打赏
举报
回复
void insertSort(int*a, int n)
{
for(int i = 1; i < n; i++)
{
int temp = a[i];
for(int j = i;(j > 0) && (a[j-1] > temp); j--)
{
a[j ] = a[j-1];
}
a[j] = temp;
}
}
adventurelw
2010-06-30
打赏
举报
回复
因为a[j+1]并没有被保存啊,你给他赋了新值,旧值肯定就没了。
但从后往前的话,因为a[0, i - 1]这个序列是已经排好序的,所以a[i-1]肯定是最大的,如果这个序列有大于a[i]也即temp的数据,a[i-1]一定大于temp,那么在循环的第一步就会进行向后的移位,将a[i-1](即a[j])移到a[i](即a[j+1]),因为a[i]已经通过temp保存了,所以被覆盖了也没有关系,这样就保证了a[j](也即可能被往后移的元素)的后一位元素都提前被另存了,自然不用担心覆盖的问题了。
zero_226
2010-06-30
打赏
举报
回复
[Quote=引用 6 楼 adventurelw 的回复:]
从前往后
你会导致一旦进行移位也就是这一步:a[j+1]=a[j]的a[j+1]的真实数据比覆盖啊。
[/Quote]
你说的很对,我今天调试的时候就是这样,但我还是不明白,怎么会被覆盖的,我是找着该移位的那个数据时才开始往后移动的,它是怎么被覆盖的?
请您指教一下
tan625747
2010-06-30
打赏
举报
回复
学习了
adventurelw
2010-06-30
打赏
举报
回复
从前往后
你会导致一旦进行移位也就是这一步:a[j+1]=a[j]的a[j+1]的真实数据比覆盖啊。
zero_226
2010-06-30
打赏
举报
回复
[Quote=引用 1 楼 adventurelw 的回复:]
for(int j = 0;(j < i) && (a[j] > temp); j++)
{
a[j + 1] = a[j];
}
应该是
for(int j = i - 1; (j >= 0) && (a[j] > temp); --j)
{
a[j + 1] = a[j];
}
吧。
[/Quote]
你说的这个很对,但我觉得我那个也行啊,一个是从前往后比,一个是从后往前比
太乙
2010-06-30
打赏
举报
回复
for(i=1;i<n;i++)
{
x=A[i];
for(j=i-1;j>=0;j--)
if(x<A[j])
A[j+1]=A[j];
else
break;
A[j+1]=x;
}
太乙
2010-06-30
打赏
举报
回复
这个是插入排序??
插入排序应该是对已排好序的吧?
cattycat
2010-06-30
打赏
举报
回复
第二个for循环for(int j=i;j>0 && a[j]>temp ;j--)
adventurelw
2010-06-30
打赏
举报
回复
for(int j = 0;(j < i) && (a[j] > temp); j++)
{
a[j + 1] = a[j];
}
应该是
for(int j = i - 1; (j >= 0) && (a[j] > temp); --j)
{
a[j + 1] = a[j];
}
吧。
C++
算法
之
插入排序
本文详细介绍了C++中的
插入排序
算法
,包括
算法
描述、具体实现步骤和代码示例。
插入排序
通过逐个将元素插入已排序的序列中,形成最终的有序序列。文章还提供了插入操作的详细解析,以及
插入排序
的时间复杂度分析,指出其总时间复杂度为O(n^2)。
排序
算法
——
插入排序
本文详细介绍了
插入排序
的基本思想、实例分析、代码实现及性能分析。通过一个具体的排序实例展示了
插入排序
的过程,从最好、最坏和平均情况分析了其时间复杂度,并指出其空间复杂度为O(1),且
插入排序
是稳定的排序
算法
。
TypeScript
算法
手册【
插入排序
】
本文围绕TypeScript中的
插入排序
算法
展开,介绍了其定义、特点,拆解了排序步骤,包括选择当前元素、寻找插入位置和插入元素。还提及了二分查找
插入排序
的优化方法,分析了
插入排序
的优缺点,指出其在特定场景有独特优势。
插入排序
算法
本文详细介绍了
插入排序
算法
的基本原理和实现过程,包括直接
插入排序
的方法、时间复杂度分析、空间复杂度评估以及稳定性讨论。此外,还提供了
插入排序
的C++实现代码示例,并通过实例演示了排序过程。
排序
算法
之
插入排序
本文以《Hello
算法
》为参考,介绍
插入排序
算法
。阐述其基于数组插入操作的思想和具体流程,给出Python和C++的实现示例。还对比了
插入排序
与冒泡排序,指出
插入排序
运行速度快,有原地、稳定、自适应优点,很多编程语言排序库函数会用到它。
C++ 语言
65,213
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章