社区
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;
}
}
求大家帮我看下这段算法的问题在哪里,我觉得逻辑挺对的啊。
帮帮忙啊,同志们
...全文
86
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];
}
吧。
MoreWindows白话经典
算法
之七大排序(高清版)
这是本人在研一上课时所整理的文档,包括冒泡排序,直接
插入排序
,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法,这些文章不仅使我在考试中取了不错的成绩,也为后来顺利面过迅雷,腾讯...
MoreWindows白话经典
算法
之七大排序第2版(高清)
在第一版的基础上新加了对冒泡排序,直接
插入排序
,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法的总结篇,方便大家复习,合适作为笔试面试前的复习资料。
完整视频-coursera公开课 普林斯顿
算法
ⅠⅡ部分
相关主题有:并查集
算法
,二分查找,栈,队列,背包,
插入排序
,选择排序,希尔排序,快速排序, 三切分快排,归并排序,堆排序,二分堆,二分查找树,红黑树,链表,线性哈希表,Graham扫描,kd树。
算法
(二)...
经典
算法
之
插入排序
算法
文章目录
插入排序
算法
前言一、什么是
插入排序
算法
?二、代码实现总结 前言 提示:这可是面试当中笔试或机试最常见的
算法
,敲黑板划重点!!!! 一、什么是
插入排序
算法
? 先问你个事,玩过扑克牌吗?斗地主、扎...
几种重要的排序
算法
——
插入排序
插入排序
分为直接
插入排序
、折半
插入排序
、希尔排序(shell sort),后两种是在直接
插入排序
的改进上而来。 1.直接
插入排序
排序思路:假设待排序的元素存放在数组A[1..n]A[1..n]A[1..n]中,在排序过程的某一时刻,...
C++ 语言
64,682
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章