堆排序结果不对
堆排序,结果是999 444 333 84 67 55 5 4 3 -5 3 3 -8 2 -99 ,不知道问题在那里,大家看看
import java.util.Arrays;
import java.util.Scanner;
public class mmm {
static void sort(int []a )
{
heap(a,a.length) ;
int len = a.length ;
int i = a.length-1;
while(len>0)
{
swap(a,0,i) ;
len-- ;
i-- ;
adjust(a,0,len) ;
}
}
static void adjust(int a[],int i,int len)
{
if(i<= len/2-1 && (a[i]>a[i*2] || a[i]>a[i*2+1]) )
{
int index ;
if(a[i*2]<a[i*2+1])
index = i*2 ;
else
index = i*2+1 ;
swap(a,i,index) ;
adjust(a,index,len) ;
}
}
static void swap(int []a,int i,int j)
{
int t = a[i] ;
a[i]= a[j] ;
a[j]=t ;
}
static void heap(int []a ,int len)
{
for(int i= len/2-1 ;i>=0 ;--i)
{
if(a[2*i]<a[i])
swap(a,i,2*i) ;
if(a[i]>a[2*i+1])
swap(a,i,2*i+1) ;
}
}
public static void main(String [] argv)
{
int [] a = {2,3,3,444,5,-8,4,3,999,-5,67,84,55,-99,333} ;
int len = a.length ;
sort(a) ;
for(int i=0 ;i<a.length ;++i)
System.out.print(a[i]+" ");
}
}
import java.util.Arrays;
import java.util.Scanner;
public class mmm {
static void sort(int []a )
{
heap(a,a.length) ;
int len = a.length ;
int i = a.length-1;
while(len>0)
{
swap(a,0,i) ;
len-- ;
i-- ;
adjust(a,0,len) ;
}
}
static void adjust(int a[],int i,int len)
{
if(i<= len/2-1 && (a[i]>a[i*2] || a[i]>a[i*2+1]) )
{
int index ;
if(a[i*2]<a[i*2+1])
index = i*2 ;
else
index = i*2+1 ;
swap(a,i,index) ;
adjust(a,index,len) ;
}
}
static void swap(int []a,int i,int j)
{
int t = a[i] ;
a[i]= a[j] ;
a[j]=t ;
}
static void heap(int []a ,int len)
{
for(int i= len/2-1 ;i>=0 ;--i)
{
if(a[2*i]<a[i])
swap(a,i,2*i) ;
if(a[i]>a[2*i+1])
swap(a,i,2*i+1) ;
}
}
public static void main(String [] argv)
{
int [] a = {2,3,3,444,5,-8,4,3,999,-5,67,84,55,-99,333} ;
int len = a.length ;
sort(a) ;
for(int i=0 ;i<a.length ;++i)
System.out.print(a[i]+" ");
}
}