社区
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;
}
}
求大家帮我看下这段算法的问题在哪里,我觉得逻辑挺对的啊。
帮帮忙啊,同志们
...全文
90
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
作业
写回复
配置赞助广告
用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白话经典
算法
之七大排序第2版(高清)
本书《更多Windows白话经典
算法
之七大排序第2版》是一部深入浅出讲解七种经典排序
算法
的著作,旨在帮助读者理解并掌握冒泡排序、直接
插入排序
、直接选择排序、希尔排序、归并排序、快速排序以及堆排序等基本概念和...
MoreWindows白话经典
算法
之七大排序(高清版)
直接
插入排序
是另一种简单的排序
算法
,它的基本思想是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 **直接
插入排序
的三种实现:** 1. **基本实现:** ```cpp void ...
JAVA近百种
算法
大全
2.
插入排序
:将待排序元素逐个插入到已排序部分,保持已排序部分始终有序。 3. 选择排序:每次选择未排序部分的最小(或最大)元素,与已排序部分的第一个元素交换。 4. 快速排序:利用分治策略,选取一个基准值,...
JAVA经典
算法
90题【含源码】
首先,"JAVA经典
算法
40题.doc"可能包含了一些基础的
算法
题目,如排序(冒泡排序、选择排序、
插入排序
、快速排序、归并排序)、搜索(线性搜索、二分搜索)、图论(最短路径问题、拓扑排序)以及动态规划等。...
完整视频-coursera公开课 普林斯顿
算法
ⅠⅡ部分
相关主题有:并查集
算法
,二分查找,栈,队列,背包,
插入排序
,选择排序,希尔排序,快速排序, 三切分快排,归并排序,堆排序,二分堆,二分查找树,红黑树,链表,线性哈希表,Graham扫描,kd树。
算法
(二)...
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章