大家帮我看一下我的直接插入排序,为什么不能正确排序.

HNLGDXYJS 2008-07-17 03:28:16
没有错误,我猜可能是数组下标混乱,可我就是看不出哪错了,请大家帮我看一下.谢谢了.

#include<iostream>
const int MAXSIZE = 30;
void InsertSort(int (&array)[MAXSIZE],int left,int right)
{
for (int i=left+1;i<=right;i++) //这里改为for (int i=left+1;i<right;i++)也不能正确排序.
if (array[i]<array[i-1])
{
int temp = array[i], j = i-1;
do
{
array[i+1] = array[i];
j--;
}
while (j >= left && temp < array[i]);
array[j+1] = temp;
}
for (int k=0;k<MAXSIZE;k++)
{
std::cout<<array[k]<<" ";
if ((k+1)%10 == 0) std::cout<<std::endl;
}
}
int main(void)
{
int array[MAXSIZE];
srand(unsigned(time(NULL)));
for (int i=0;i<MAXSIZE;i++)
array[i] = rand()%10000;
InsertSort(array,0,MAXSIZE-1); //这里改为InsertSort(array,1,MAXSIZE)也不能正确排序.
return 0;
}

...全文
151 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
HNLGDXYJS 2008-07-17
  • 打赏
  • 举报
回复
嗯,我也觉得加上那对大括号好看了一点,谢谢.
coverallwangp 2008-07-17
  • 打赏
  • 举报
回复
{}要不要都行。我只是为了格式上的好看,加的。

你把i和j弄混了,呵呵,不客气!
HNLGDXYJS 2008-07-17
  • 打赏
  • 举报
回复
晕,然来是i跟j弄混了,谢谢coverallwangp .
HNLGDXYJS 2008-07-17
  • 打赏
  • 举报
回复
把大括号去了也可以,我看再一下,看你帮我改了哪里.呵呵.谢谢了.
HNLGDXYJS 2008-07-17
  • 打赏
  • 举报
回复
回4楼,我没看出哪改了啊,不好意思,我只是觉得你帮我为for又加了个大括号,然后就可以了.
可是我觉得不用了啊,不是吗?
[code=C/C++]
for (int i=left+1;i<=right;i++)
{
if (array[i] < array[i-1])
{
int temp = array[i], j = i-1;
do
{
array[j+1] = array[j];//修改
j--;
}while (j >= left && temp < array[j]);//修改
array[j+1] = temp;
}
}
[code]
coverallwangp 2008-07-17
  • 打赏
  • 举报
回复
我的第二次发的没有问题,可以按照从小到大排序!
HNLGDXYJS 2008-07-17
  • 打赏
  • 举报
回复
谢谢楼上先,我忘了加#include<ctime>
但是加了以后还是不行,可不可以再帮我看一下,谢谢.
coverallwangp 2008-07-17
  • 打赏
  • 举报
回复

#include<iostream>
#include<time.h>
const int MAXSIZE = 30;
void InsertSort(int (&array)[MAXSIZE],int left,int right)
{
for (int i=left+1;i<=right;i++)
{
if (array[i] < array[i-1])
{
int temp = array[i], j = i-1;
do
{
array[j+1] = array[j];//修改
j--;
}while (j >= left && temp < array[j]);//修改
array[j+1] = temp;
}
}

for (int k=0;k<MAXSIZE;k++)
{
std::cout<<array[k]<<" ";
if ((k+1)%10 == 0) std::cout<<std::endl;
}
}
int main(void)
{
int array[MAXSIZE];
srand(unsigned(time(NULL)));

for (int i=0;i<MAXSIZE;i++)
array[i] = rand()%100;

InsertSort(array,0,MAXSIZE-1);
return 0;
}

coverallwangp 2008-07-17
  • 打赏
  • 举报
回复

#include<iostream>
#include<time.h>
const int MAXSIZE = 30;
void InsertSort(int (&array)[MAXSIZE],int left,int right)
{
for (int i=left+1;i<=right;i++) //这里改为for (int i=left+1;i<right;i++)也不能正确排序.
{
if (array[i] < array[i-1])
{
int temp = array[i], j = i-1;
do
{
array[j+1] = array[j];
j--;
}while (j >= left && temp < array[i]);
array[j+1] = temp;
}
}

for (int k=0;k<MAXSIZE;k++)
{
std::cout<<array[k]<<" ";
if ((k+1)%10 == 0) std::cout<<std::endl;
}
}
int main(void)
{
int array[MAXSIZE];
srand(unsigned(time(NULL)));

for (int i=0;i<MAXSIZE;i++)
array[i] = rand()%10000;

InsertSort(array,0,MAXSIZE-1); //这里改为InsertSort(array,1,MAXSIZE)也不能正确排序.
return 0;
}

64,646

社区成员

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

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