快速排序
void quickSort(int [] a,int low,int high) {
if(low < high) { //if语句,长度大于1
int pivot = partition(a,low,high);
quickSort(a,low,pivot-1);
quickSort(a,pivot+1,high);
}
}
private int partition(int[] a, int low, int high) {
int pivot = a[low];
while(low < high) {
while(low < high && a[high] >= pivot ) //勿漏 =
high--;
a[low] = a[high]; //将较小的数移前
while(low < high && a[low] <= pivot )
low++;
a[high] = a[low]; //将较大的数移后
}
a[low] = pivot; //勿漏,枢轴记录到位
return low;
}
堆排序
public int[] HeapSort (int[] arr) {
int len = arr.length;
//从第一个非叶子节点开始往下调整
for(int i = len / 2 - 1;i >= 0;i--){
sink(arr,i,len);
}
//调整完之后arr[0]为最大,与最后一个数进行交换,再继续往下调
for(int i = len - 1;i > 0;i--){
int temp = arr[i];arr[i] = arr[0];arr[0] = temp;
sink(arr,0,i);
}
return arr;
}
private void sink(int[] a,int i,int len){
int temp = a[i];
int j = 0;
while((j = i * 2 + 1) < len){
if(j + 1 < len && a[j + 1] > a[j])
j++;
if(a[j] > temp){
a[i] = a[j];
i = j;
}
else{
break;
}
}
a[i] = temp;
}