@@ -153,6 +153,50 @@ public void shellSort(int nums[]) {
153153 }
154154 /***************************************希尔排序******************************************/
155155
156+ /********************************堆排序*******************************************/
157+ public int findKthLargest (int [] nums , int k ) {
158+ if (nums == null || nums .length < k ) {
159+ return 0 ;
160+ }
161+ int heapSize = nums .length ;
162+ buildHeap (nums , heapSize );
163+ for (int i = nums .length -1 ; i > nums .length -k ; i --) {
164+ swap (nums , 0 , i );
165+ heapSize --;
166+ heapify (nums , 0 , heapSize );
167+ }
168+ return nums [0 ];
169+ }
170+
171+ public void buildHeap (int [] nums , int heapSize ) {
172+ for (int i = (heapSize - 2 ) / 2 ; i >= 0 ; i --) {
173+ heapify (nums , i , heapSize );
174+ }
175+ }
176+
177+ public void heapify (int [] nums , int curNode , int heapSize ) {
178+ int l = curNode * 2 + 1 ;
179+ int r = curNode * 2 + 2 ;
180+ int largest = curNode ;
181+ if (l < heapSize && nums [l ] > nums [largest ]) {
182+ largest = l ;
183+ }
184+ if (r < heapSize && nums [r ] > nums [largest ]) {
185+ largest = r ;
186+ }
187+ if (largest != curNode ) {
188+ swap (nums , curNode , largest );
189+ heapify (nums , largest , heapSize );
190+ }
191+ }
192+
193+ // public void swap(int[] nums, int x, int y) {
194+ // int tmp = nums[x];
195+ // nums[x] = nums[y];
196+ // nums[y] = tmp;
197+ // }
198+ /********************************堆排序*******************************************/
199+
156200 public static void main (String [] args ) {
157201 Sort s = new Sort ();
158202 int [] nums = {5 ,2 ,6 ,1 ,7 ,3 ,2 };
0 commit comments