publicclassMain{publicstaticvoidmain(String[] args){int n =Integer.MAX_VALUE/2;int node[]={1,2,3,4,5};int matrix[][]=newint[node.length +1][node.length +1];
matrix[1]=newint[]{n,0,1, n,3, n};
matrix[2]=newint[]{n, n,0,3,1, n};
matrix[3]=newint[]{n, n, n,0, n,1};
matrix[4]=newint[]{n, n, n,1,0, n};
matrix[5]=newint[]{n, n, n, n, n,0};// 求1到其它点的最短距离int distance[]={n,0, n, n, n, n};// 每次从一点开始搜索boolean accessed[]=newboolean[node.length +1];// 共node.length个点for(int i =0; i < node.length; i++){int curIndex =findMin(distance, accessed);
accessed[curIndex]=true;// 如果有更短路径则更新for(int j =1; j < distance.length; j++){if(curIndex != j && distance[j]> matrix[curIndex][j]+ distance[curIndex]){
distance[j]= matrix[curIndex][j]+ distance[curIndex];}}}System.out.println(distance[5]);}// 找最小distance的一个,易得起始节点到此点的距离已最小,可以开始对其邻居进行访问privatestaticintfindMin(int[] distance,boolean[] accessed){int index =1;int min =Integer.MAX_VALUE;for(int i =1; i < distance.length; i++){if(!accessed[i]&& min > distance[i]){
min = distance[i];
index = i;}}return index;}}
publicclassHeapSort{publicstaticvoidmain(String[] args){int nums[]={1,3,4,2,6,5};heapSort(nums);}publicstaticvoidheapSort(int[] nums){int n = nums.length;// 挑整数组位置,使得父节点大于子节点,从最后一个非叶子节点开始for(int i = n /2-1; i >=0; i--){adjust(nums, n, i);}// 依次从堆中提取元素,for(int i = n -1; i >0; i--){// 将当前父节点移动到末尾int tmp = nums[0];
nums[0]= nums[i];
nums[i]= tmp;// 移动到末尾后继续调整堆adjust(nums, i,0);}}privatestaticvoidadjust(int[] nums,int n,int i){// i表示父节点int largest = i;int left =2* i +1;// 左子节点int right =2* i +2;// 右子节点// 如果左子节点大于根节点if(left < n && nums[left]> nums[largest]){
largest = left;}// 如果右子节点大于当前最大值if(right < n && nums[right]> nums[largest]){
largest = right;}// 如果最大值不是根节点 交换节点位置,使得较大一方到父节点位置if(largest != i){int tmp = nums[i];
nums[i]= nums[largest];
nums[largest]= tmp;// 调整交换后子节点所在的子树adjust(nums, n, largest);}}}