简单排序:把一个整数按大小顺序插入已排好序的数组中

bygreat 2007-04-02 05:29:20
把一个整数按大小顺序插入已排好序的数组中。为了把一个数按大小插入已排好序的数组中, 应首先确定排序是从大到小还是从小到大进行的。设排序是从大到小进序的,则可把欲插入 的数与数组中各数逐个比较,当找到第一个比插入数小的元素i时,该元素之前即为插入位置。 然后从数组最后一个元素开始到该元素为止,逐个后移一个单元。最后把插入数赋予元素i即可。 如果被插入数比所有的元素值都小则插入最后位置
以下是我写的程序:

#include<iostream.h>
void main()
{
int array[10] = {1,3,6,9,44};
int a = 5;

for(int i = 0; i < 6; i ++)
{
if(a > array[i] && a < array[i+1])
{
for(int j = i + 1; j < 6; j++)
{
array[j+1] = array[j];
array[j] = a;
}
}
}

for(int k = 0; k < 6; k ++)
{
cout << array[k] << endl;
}
}
要得到1,3,5,6,9,44
但是运行结果是1,3,5,5,5,5
请各位帮忙解答
...全文
1113 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bygreat 2007-04-03
  • 打赏
  • 举报
回复
谢谢各位
cccbuiler 2007-04-03
  • 打赏
  • 举报
回复
for(int j = i + 1; j < 6; j++)
{
array[j+1] = array[j];
//array[j] = a;这里的问题
}
array[j] = a;//修改如下
break;//补充一下
cccbuiler 2007-04-03
  • 打赏
  • 举报
回复
for(int j = i + 1; j < 6; j++)
{
array[j+1] = array[j];
//array[j] = a;这里的问题
}
array[j] = a;//修改如下
heartbeast 2007-04-03
  • 打赏
  • 举报
回复
用二分法快很多哦
dodober 2007-04-02
  • 打赏
  • 举报
回复
if(a > array[i] && a < array[i+1])
{
for(int j = 9; j >i; j--)

array[j] = array[j-1];
array[i+1] = a;

}
你的程序中if语句中改成这样就可以了。从数组末尾开始移动。
Veini 2007-04-02
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

void main()
{
int array[10]={1,3,6,9,44};
int a=5;
for(int i=0;i<6;i++)
{
if(a<array[i])
{
for(int j=5;j>i;j--)
{
array[j]=array[j-1];
}
array[i]=a;
break;
}
}

for(int k=0;k<6;k++)
{
cout<<array[k]<<endl;
}
}

bargio_susie 2007-04-02
  • 打赏
  • 举报
回复
上面是根据你的原意思来改的。
for(int j = i + 1; j < 6; j++)
你这句是想把找到比a大的值往后移是吧,但这样你就会把前面的值都把后面的覆盖掉了,比如说找到a[2]为5,你把a[2]给a[3],a[3]给a[4]...这样a[3],a[4]...值其实都是a[2].所以应该从最后一个移起。
freeemperor 2007-04-02
  • 打赏
  • 举报
回复
for(int j = i + 1; j < 6; j++)
{
array[j+1] = array[j];
array[j] = a;
}
这个循环赋值给了array[j]以后的值都是a(5)
bargio_susie 2007-04-02
  • 打赏
  • 举报
回复
#include<iostream.h>
void main()
{
int array[10] = {1,3,6,9,44};
int a = 5;

for(int i = 0; i < 5; i ++)
{
if(a > array[i] && a < array[i+1])
{
for(int j = 4; j >= i+1; j--)
array[j+1] = array[j];
array[i+1] = a;
break;
}
}

for(int k = 0; k < 6; k ++)
{
cout << array[k] << endl;
}
}
bygreat 2007-04-02
  • 打赏
  • 举报
回复
谢谢!不过能解释一下我的为什么不对
错在哪里,想不通
boxban 2007-04-02
  • 打赏
  • 举报
回复
#include<iostream>

using namespace std;
void insert(int* array, int& size, int x)
{
int pos = size;

while(pos > 0 && x < array[pos - 1]){
array[pos] = array[pos - 1];
pos--;
}
array[pos] = x;

++size;
}


void main()
{
int array[10] = {1,3,6,9,44};
int size = 5;

insert(array, size, 5);
insert(array, size, 0);
insert(array, size, 100);

for(int k = 0; k < size; k ++)
{
cout << array[k] << endl;
}
}
长尾巴的悟空 2007-04-02
  • 打赏
  • 举报
回复
看不懂这句,难道都不符合条件吗?
if(a > array[i] && a < array[i+1])

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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