堆排序

import java.util.Arrays;

public class Sort {
	public static void main(String[] args) {
		int arr[]={2,4,5,1,0,3,9,8,7,6};
		sort(arr);
		
		
		System.out.println(Arrays.toString(arr));
	}
	public static void Swap(int arr[],int i,int j){
		arr[i]=arr[i]+arr[j];
		arr[j]=arr[i]-arr[j];
		arr[i]=arr[i]-arr[j];
		
	}
	public static void adjustHeap(int arr[],int i,int length){
		int temp=arr[i];
		for (int k=2*i+1; k< length; k=2*k+1) {
			if(k+1<length && arr[k]<arr[k+1]){//如果左子結點小於右子結點,k指向右子結點
                k++;
            }
			if(arr[k]>temp)
			{
			     arr[i] = arr[k];
	             i = k;
	        }
			else
			{
	             break;
	        }
			
			
			
		}
		
		arr[i] = temp;
	}
	
	
	public static void sort(int []arr){
        //1.構建大頂堆
        for(int i=arr.length/2-1;i>=0;i--){
            //從第一個非葉子結點從下至上,從右至左調整結構
            adjustHeap(arr,i,arr.length);
        }
        //2.調整堆結構+交換堆頂元素與末尾元素
        for(int j=arr.length-1;j>0;j--){
            Swap(arr,0,j);//將堆頂元素與末尾元素進行交換
            adjustHeap(arr,0,j);//重新對堆進行調整
        }

    }

	

}

發佈了41 篇原創文章 · 獲贊 40 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章