=============================================================================================
20130618_第一次修改
=============================================================================================
今天在审阅排序的函数时因为一时大意,发现了一个数据选择错误。由于其现实意义,特别再这篇文章中进行记录。
源码部分:
#include<iostream>
using namespace std;
class sort
{
int data[100];
int length;
int number;
public:
sort()
{
length=0;
number=0;
}
sort(int d[],int len)
{
for(int
i=1;i<=len;i++)//在构造函数中完成数组输入按位序排列,空出data[0]的空间
data[i]=d[i-1];
length=len;
number=0;
}
void insert()
{
for(int i=2;i<=length;i++)
{
data[0]=data[i];
for(int j=i-1; (j>=0)
&& (data[0]
data[j+1]=data[0];
}
}
{
for(int i=1;i<=length;i++)
cout<<data[i]<<"
";
}
};
int main()
{
int d[]={9,8,10,7,4,5,6};
sort s1(d,7);
s1.insert();
s1.output();
}
好,我们继续做直接插入函数处理部分,
先做i=2时,没有出现问题,因为8<9,完成交换操作。
继续i=3时的调试,由于10>9,所以直接退出for循环。
继续i=4时的调试。
直接退出了循环,这下我明白了,原来每次进行比较都是用会被j进行修改的原来位序i的数组位置里的数据来进行判断,但是每次进行判断data[i]<10?答案当然是逻辑假,直接退出for循环,直接进行后面的位序操作,就会出现9,8,7,4,5,6,10这样的数据序列。
即使有一天在技术上我已经是个能手,请记住自己应有的责任和保持一个真诚交流、始终渴望追求技术的心。
----------ccb_warlock