public void quickSort(int[] data,int low,int high){
if (low < high){
int middle = getMiddleIndex(data,low,high);
quickSort(data,low,middle-1);
quickSort(data,middle+1,high);
}
}
public int getMiddleIndex(int[] data,int low,int high){
int temp = data[low];
while (low < high){
while (low < high && data[high] >= temp){
high--;
}
data[low] = data[high];
while (low < high && data[low] <= temp){
low++;
}
data[high] = data[low];
}
data[low] = temp;
return low;
}
public void mergeSort(int[] ints, int[] merge, int start, int end)
{
if (start >= end) return;
int mid = (end + start) >> 1;
mergeSort(ints, merge, start, mid);
mergeSort(ints, merge, mid + 1, end);
merge(ints, merge, start, end, mid);
}
private void merge(int[] a, int[] merge, int start, int end,int mid)
{
int i = start;
int j = mid+1;
int pos = start;
while( i <= mid || j <= end ){
if( i > mid ){
while( j <= end ) merge[pos++] = a[j++];
break;
}
if( j > end ){
while( i <= mid ) merge[pos++] = a[i++];
break;
}
merge[pos++] = a[i] >= a[j] ? a[j++] : a[i++];
}
for (pos = start; pos <= end; pos++)
a[pos] = merge[pos];
}
堆排序:PriorityQueue,优先级队列,依据优先级进行排序,可实现最大堆,最小堆
public static void main(String[] args){
int[] arr = {20,25,63,10,98,52,46,32,85,74,97};
getGreatestK(arr, 5);
}
public static void getGreatestK(int[] arr,int k){
if( arr == null || arr.length < k)
return;
Queue<Integer> queue = new PriorityQueue<>(11,new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return o2 - o1;
}
});
for(int i=0; i<arr.length;++i){
queue.offer(arr[i]);
}
for(int i=0; i<k; ++i){
System.out.print(queue.peek() + " ");
queue.poll();
}
}