顺序表划分的问题

ilwmin 2009-12-22 10:42:05
有一个顺序表,内容是25,30,20,60,10,35,15
划分的要求是以第一个元素25为界,把上面的数据大的都放在25的后面,小的放到25的前面.
实现算法如下:

void part(sequenList &L)
{
int i,j;
DataType a;
a = L.data[0];
i = 0;
j = L.length() - 1;
while(i < j)
{
while((i < j) && (L.data[j] >= a)) j--;
L.data[i] = L.data[j];
while((i < j) && (L.data[i] <= a)) i++;
L.data[j] = L.data[i];
}
L.data[i] = a;
}

使用上面的函数可以实现划分的要求.

有下面的问题不太明白:
执行L.data[i] = L.data[j];后L.data[i]的值已经被替换了,也就是说在顺序表中L.data[i]的值是不是已经不存在了?
那为什么还能正确划分呢?
...全文
119 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
logiciel 2009-12-22
  • 打赏
  • 举报
回复
LZ如果跟踪程序的执行流程,可以看到,第1次用L.data[6]替换L.data[0],然后用L.data[1]替换L.data[6],也就是说,如果用L.data[j]替换了L.data[i],那么L.data[j]将被新的L.data[i]替换,在这个过程中除了第一个数据真的被覆盖外,其它数据只是搬了一个位置.而第一个数据被保存在a中,最后把这个a放到最后的L.data[i]中,这样所有数据都没有被破坏.

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧