65,210
社区成员
发帖
与我相关
我的任务
分享
#include <iostream.h>
const int max=20;
class numset
{
int count; //已经插入到数组中整数的数目
int a[max]; //数组最好初始化
public:
numset() {count=0;}
void addnum(int n)
{
int i=0,j;
while (i <count && n>=a[i]) //从按从小到大排序的数组中寻找n值得插入位置
i++;
if (n==a[i-1]) // 如果要插入数值==数组中已有的值,则不进行插入
// **当插入第一个数时,此处会出现a[-1],可能出现bug
return;
for (j=count;j>=i;j--) //移动数组中大于n的数后移,空出位置i
{
a[j+1]=a[j];
}
a[i]=n; //在空出的位置上 插入n
count++; //数组中整数数目加1
}
void disp()
{
for (int i=0;i <count;i++ )
cout <<"a[i]=" <<a[i] <<endl;
}
};
void main()
{
numset set;
set.addnum(1);
set.addnum(9);
set.addnum(5);
set.addnum(9);
set.disp();
}
从简单的做起,一步一步分析解决问题!
把所有的变量所表示的意义,以及变量值的变化过程搞明白就清楚了。
说实在的,这种代码我个人一般懒的看,变量没有命名规则且没有任何注释,不建议初学者看这种代码
容易误入歧途!
下面是改的,加了一点注释,看楼主能否看明白:
#include <iostream>
using namespace std;
const int MAX=20;
class Cont
{
int count; //记录插入数组array元素的个数
int array[MAX]; //容纳元素的数组,最大可容纳MAX个元素
public:
Cont():count(0) {} //Cont刚构造对象时,数组中时没有元素的
void SortInsert(int digital) //必须调用这个函数插入元素,元素
//重复就不会插入排序了
{
int i,j;
for(i=0;i<count;) //从数组下标为0的位置找
{
if(digital>=array[i]) ++i; //遍历数组,查找digital
//应该安插在什么位置
else break;
}
// while (i<count&&digital>=array[i]) i++;
if (digital==array[i-1]) return; //如果传入的数值与数组的最后
//一个值相等,直接返回,不做插入操作,等于排除了插入相等的情况
for (j=count;j>=i;j--) {array[j+1]=array[j];}
//此循环中的i已经标示了digital应该插入的位置,因此,从数组尾部开始
//到i的位置做元素移动,主要把i位置腾空留给digital
array[i]=digital; //看到没有i位置被digital占有了
count++; //最后别忘了数组元素加1
}
void disp()
{
for (int i=0;i <count;i++ )
cout <<"array[i]=" <<array[i] <<endl;
}
};
int main()
{
Cont set;
set.SortInsert(1);
set.SortInsert(9);
set.SortInsert(5);
set.SortInsert(9);
set.SortInsert(11);
set.disp();
return 0;
}
void addnum(int n)
{
int i=0,j;
while (i <count && n>=a[i]) i++; //从第一个开始找大于n的数
if (n==a[i-1]) return; // 如果是因为i>=count 退出 则返回
for (j=count;j>=i;j--) {a[j+1]=a[j];} // 把所有插入位置之后的元素移动到后面一个位置
a[i]=n; // 插入n
count++; // 计数+1
}
[/Quote]