diff --git "a/\345\240\206\346\216\222\345\272\217/heapAdjust.java" "b/\345\240\206\346\216\222\345\272\217/heapAdjust.java" new file mode 100644 index 0000000000000000000000000000000000000000..60cf3c3c3c22761dcb5871b1439d5adad738f6dc --- /dev/null +++ "b/\345\240\206\346\216\222\345\272\217/heapAdjust.java" @@ -0,0 +1,12 @@ +private void heapAdjust(DataItem[]r,int low,int high) { + DataItemtemp=r[low]; + for(int j=2*low;j<=high;j=j*2) { + if(j[ ]r){ +int n=r.length-1; +for(int i=n/2;i>=1;i--) +headAdjust(r,i,n); +for(int i=n;i>1;i--){ + DataItemtemp=r[1]; + r[1]=r[i]; + r[i]=temp; + heapAdjust(人,1,i-1); +} +} \ No newline at end of file diff --git "a/\345\260\217\351\241\266\345\240\206\347\232\204\345\256\236\347\216\260/HeapSort.class" "b/\345\260\217\351\241\266\345\240\206\347\232\204\345\256\236\347\216\260/HeapSort.class" new file mode 100644 index 0000000000000000000000000000000000000000..06ae0f258b7e8ce81f8529c4cfc6b26288d5ca36 Binary files /dev/null and "b/\345\260\217\351\241\266\345\240\206\347\232\204\345\256\236\347\216\260/HeapSort.class" differ diff --git "a/\345\260\217\351\241\266\345\240\206\347\232\204\345\256\236\347\216\260/HeapSort.java" "b/\345\260\217\351\241\266\345\240\206\347\232\204\345\256\236\347\216\260/HeapSort.java" new file mode 100644 index 0000000000000000000000000000000000000000..399472ffb9ffe70211f7d3362572906f961f464f --- /dev/null +++ "b/\345\260\217\351\241\266\345\240\206\347\232\204\345\256\236\347\216\260/HeapSort.java" @@ -0,0 +1,63 @@ + +import java.util.Arrays; +/** + * + * @author Administrator + * + */ +public class HeapSort { + public static void main(String []args){ + int []arr = {7,6,7,11,5,12,3,0,1}; + System.out.println("排序前:"+Arrays.toString(arr)); + sort(arr); + System.out.println("排序前:"+Arrays.toString(arr)); + } + + 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);//重新对堆进行调整 + } + + } + + /** + * 调整大顶堆(仅是调整过程,建立在大顶堆已构建的基础上) + * @param arr + * @param i + * @param length + */ + public static void adjustHeap(int []arr,int i,int length){ + int temp = arr[i];//先取出当前元素i + for(int k=i*2+1;ktemp){//如果子节点大于父节点,将子节点值赋给父节点(不用进行交换) + arr[i] = arr[k]; + i = k; + }else{ + break; + } + } + arr[i] = temp;//将temp值放到最终的位置 + } + + /** + * 交换元素 + * @param arr + * @param a + * @param b + */ + public static void swap(int []arr,int a ,int b){ + int temp=arr[a]; + arr[a] = arr[b]; + arr[b] = temp; + } +} \ No newline at end of file