📄 chsort.java
字号:
public class CHsort {
public void CHSortFormStack(double[] DataSource,long[] IndexPointer,int Length)
{
if(Length<2)
{
return;
}
int i,j,l;
long rra;
l=(Length>>1)+1;
for(;;)
{
if(l>1)
{
rra=IndexPointer[--l-1];
}
else
{
break;
}
i=l;
j=l+l;
while(j<=Length)
{
if(j<Length&& Math.abs(DataSource[(int)IndexPointer[j-1]])<Math.abs(DataSource[(int)IndexPointer[j]])) ++j;
if(Math.abs(DataSource[(int)rra])< Math.abs(DataSource[(int)IndexPointer[j-1]]))
{
IndexPointer[i-1]=IndexPointer[j-1];
i=j;
j<<=1;
}
else
break;
}
IndexPointer[i-1]=rra;
}
}
//////// StackSort New Comer to Stack
public void CHSortNewComer(double[] DataSource,long[] IndexPointer,int OriginalLength)
{
int i,j,l;
long rra;
++OriginalLength;
l=(OriginalLength);
for(;;)
{
if(l>1)
{
l>>=1;
rra=IndexPointer[l-1];
}
else
{
break;
}
i=l;
j=l+l;
while(j<=OriginalLength)
{
if(j<OriginalLength && Math.abs(DataSource[(int)IndexPointer[j-1]])<Math.abs(DataSource[(int)IndexPointer[j]])) ++j;
if(Math.abs(DataSource[(int)rra])< Math.abs(DataSource[(int)IndexPointer[j-1]]))
{
IndexPointer[i-1]=IndexPointer[j-1];
i=j;
j<<=1;
}
else
break;
}
IndexPointer[i-1]=rra;
}
}
////// StackSort Top Retire
public void CHSortTopRetire(double[] DataSource,long[] IndexPointer,int Length)
{
if(Length<2)
{
return;
}
int i,ir,j,l;
long rra;
l=1;
ir=Length;
rra=IndexPointer[ir-1];
IndexPointer[ir-1]=IndexPointer[0];
if(--ir==1)
{
IndexPointer[0]=rra;
return;
}
i=l;
j=l+l;
while(j<=ir)
{
if(j<ir&& Math.abs(DataSource[(int)IndexPointer[j-1]])<Math.abs(DataSource[(int)IndexPointer[j]])) ++j;
if(Math.abs(DataSource[(int)rra])<Math.abs(DataSource[(int)IndexPointer[j-1]]))
{
IndexPointer[i-1]=IndexPointer[j-1];
i=j;
j<<=1;
}
else
break;
}
IndexPointer[i-1]=rra;
}
public void CHSortUpdateTop(double[] DataSource,long[] IndexPointer,int Length)
{
if(Length<2)
{
return;
}
int i,ir,j,l;
long rra;
l=1;
ir=Length;
rra=IndexPointer[0];
if(ir==1)
{
return;
}
i=l;
j=l+l;
while(j<=ir)
{
if(j<ir&& Math.abs(DataSource[(int)IndexPointer[j-1]])<Math.abs(DataSource[(int)IndexPointer[j]])) ++j;
if(Math.abs(DataSource[(int)rra])<Math.abs(DataSource[(int)IndexPointer[j-1]]))
{
IndexPointer[i-1]=IndexPointer[j-1];
i=j;
j<<=1;
}
else
break;
}
IndexPointer[i-1]=rra;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -