private Int[] arry=new arry[10]; //成员变量
Int[0]=32;
Int[1]=10;
Int[2]=78;
Int[3]=89
Int[4]=67;
Int[6]=108;
Int[7]=34;
Int[8]=45
Int[9]=100;public void insertionSort()
{
int in,out; for(out=1;out<arry.lenth();out++)
{
long temp=a[out];
in = out;
while(int>0 && a[in-1]) >= temp)
{
a[in] = a[in-1];
--in;
}
a[in] =temp
}}
在这个插入排序中的--in改成in++,结果有什么不同,请高手解决下,
Int[0]=32;
Int[1]=10;
Int[2]=78;
Int[3]=89
Int[4]=67;
Int[6]=108;
Int[7]=34;
Int[8]=45
Int[9]=100;public void insertionSort()
{
int in,out; for(out=1;out<arry.lenth();out++)
{
long temp=a[out];
in = out;
while(int>0 && a[in-1]) >= temp)
{
a[in] = a[in-1];
--in;
}
a[in] =temp
}}
在这个插入排序中的--in改成in++,结果有什么不同,请高手解决下,
private Int[] arry=new arry[10]; //成员变量 Int[0]=32; //这一段怎么写到了方法外?
Int[1]=10;
Int[2]=78;
Int[3]=89
Int[4]=67;
Int[6]=108;
Int[7]=34;
Int[8]=45
Int[9]=100; public void insertionSort()
{
int in,out; for(out=1;out <arry.lenth();out++) //应该用arry.length
{
long temp=a[out]; //为什么要用long?
in = out;
while(int>0 && a[in-1]) >= temp) //应该用in?
{
a[in] = a[in-1];
--in;
}
a[in] =temp
} }
第x趟:假设前面x个元素已经排好序了。
第x+1个元素插入到前面排序好的中,方法是把前面所有大于a[x+1]都向后移动一个位置。空出的位置放入a[x].这个用以下代码实现:
int temp=a[out]; //a[out]就是第x个元素。
in = out;
while(int>0 && a[in-1]) >= temp) //如果a[in-1]>=temp就把a[in-1]向后移动一个位置(temp就是a[x])
{
a[in] = a[in-1];
--in; //这里的--in就是再向前走,准备看看前面还有没有比temp大的元素了。
} 所以--in是不能改为in++的,了解了算法,才能了解代码。
第一趟:
[32]、10、78、89、67、108、34、45、100
结果为:
[10、32]、78、89、67、108、34、45、100
第二趟:
[10、32]、78、89、67、108、34、45、100
结果为:
[10、32、78]、89、67、108、34、45、100
第三趟:
[10、32、78]、89、67、108、34、45、100
结果为:
[10、32、78、89]、67、108、34、45、100
第四趟:要把67插入到前面[]中,就要把[]中所有比67大的元素都向后移动一个位置。78和89都向后移,空出原来放78的位置放入67.
[10、32、78、89]、67、108、34、45、100
结果为:
[10、32、67、78、89]、108、34、45、100
以下的步骤类似。