java语言中写的堆排序代码
public class sort {
public static void main(String[] args){
int []arr={30,1001,23,96,78,37,45,66,99,100,1000,1};
print(arr);
sort(arr,arr.length);
print(arr);
}
public static void print(int []arr){//打印数组
if(arr==null || arr.length<1) return ;
for(int i: arr) System.out.print(i+" ");
System.out.println();
}
public static void sort(int arr[],int n){//堆排序
for(int i=n/2-1;i>=0;i--)
adjustSort(arr,i,n);
for(int i=n-1;i>0;i--)
{
int temp=arr[0];
arr[0]=arr[i];
arr[i]=temp;
adjustSort(arr,0,i);
}
}
public static void adjustSort(int arr[],int k,int n){
int temp=arr[k];
for(int i=2*k+1;i2*i+1)
{
if(i+11]) {i++;}
// if(arr[i]
if(arr[i]>temp) {arr[k]=arr[i]; k=i;}
else break;
}
arr[k]=temp;
// print(arr);
}
在adjustSort函数中,第一个if语句执行正确,注释掉的报溢出错
待解决,求
评论
猜测: 这与&&的执行顺序有关,if(arr[i]<arr[i+1] && i+1<n) i++;的时候,先执行arr[i]<arr[i+1]而i+1所指的数据元素为空,所以会有溢出错误,当反过来先判断i+1< n 时,&&前面的条件为true,后面的才会执行,没有溢出错误