堆排序
public class HeapSort {
public static void heapSort(int[] arr
) {
if (arr
== null
|| arr
.length
< 2) {
return;
}
for (int i
= 0; i
< arr
.length
; i
++) {
heapInsert(arr
, i
);
}
int heapsize
= arr
.length
;
swap(arr
, 0, --heapsize
);
while (heapsize
> 0) {
heapify(arr
, 0, heapsize
);
swap(arr
, 0, --heapsize
);
}
}
public static void heapify(int[] arr
, int index
, int heapsize
) {
int left
= index
* 2 + 1;
while (left
< heapsize
) {
int bigindex
= left
+ 1 < heapsize
&& arr
[left
+ 1] > arr
[left
] ? left
+ 1 : left
;
bigindex
= arr
[bigindex
] > arr
[index
] ? bigindex
: index
;
if (bigindex
== index
) {
break;
}
swap(arr
, bigindex
, index
);
index
= bigindex
;
left
= index
* 2 + 1;
}
}
public static void heapInsert(int[] arr
, int index
) {
while (arr
[index
] > arr
[(index
- 1) / 2]) {
swap(arr
, index
, (index
- 1) / 2);
index
= (index
- 1) / 2;
}
}
public static void swap(int[] arr
, int i
, int j
) {
int tmp
= arr
[i
];
arr
[i
] = arr
[j
];
arr
[j
] = tmp
;
}
public static void main(String
[] args
) {
int[] arr
= { 2, 3, 6, 1, 8, 5, 5, 6, 0 };
heapSort(arr
);
for (int i
= 0; i
< arr
.length
; i
++) {
System
.out
.println(arr
[i
]);
}
}
}
转载请注明原文地址: https://mac.8miu.com/read-503426.html