Skip to content

Commit 9cc95a0

Browse files
committed
ok
1 parent dd02236 commit 9cc95a0

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

src/com/leetcode/Main215.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,6 @@ public static void main(String[] args) {
7979
int[] nums = {3,2,1,5,6,4};
8080
int k = 2;
8181
Main215 m = new Main215();
82-
System.out.println(m.findKthLargest0(nums, k));
82+
System.out.println(m.findKthLargest(nums, k));
8383
}
8484
}

src/com/leetcode/Sort.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)