快速排序三

基于上篇博客最后的思路做以修改

package com.quickSort2;

public class ArrayIns {

private int nElems;
private int[] arr;

public ArrayIns(int max) {
arr = new int[max];
nElems = 0;
}

public int size() {
return nElems;
}

public void insert(int value) {
arr[nElems++] = value;
}

public void display() {
for (int i = 0; i < nElems; i++)
System.out.print("the" + i + "Elem is " + arr[i] + " ");
}

public void quickSort() {
recQuickSort(0, nElems - 1);
}

public void recQuickSort(int left,int right){
int size=right - left + 1;
if(size<=3)
manulSort(left,right);
else{
int median = medianOf3(left,right);
int position = partitionIt(left, right, median);
recQuickSort(left, position - 1);
recQuickSort(position + 1, right);
}

}

public int partitionIt(int left, int right, int pivot) {
int leftPtr = left;
int rightPtr = right -1;

while (true) {
while (arr[++leftPtr] < pivot)
;
while ( arr[--rightPtr] > pivot)
;
if (leftPtr >= rightPtr)
break;
else
swap(leftPtr, rightPtr);
}
swap(leftPtr, right-1);
return leftPtr;
}


public int medianOf3(int left,int right){

int center = (right + left) / 2;
if(arr[left] > arr[center])
swap(left,center);

if(arr[left] > arr[right])
swap(left,right);

if(arr[center] > arr[right])
swap(center,right);

swap(center,right-1);
return arr[right-1];



}

public void manulSort(int left,int right){
int size = right - left +1 ;
if(size<=1)
return;
else if(size == 2){
if(arr[left] > arr[right]){
swap(left,right);
}
return;

}
else{
if(arr[left] > arr[right])
swap(left,right);
if(arr[left] > arr[right - 1])
swap(left,right -1);
if(arr[right-1] > arr[right])
swap(right -1,right);
}



}

public void swap(int leftValue, int rightValue) {
int temp;
temp = arr[rightValue];
arr[rightValue] = arr[leftValue];
arr[leftValue] = temp;
}
}

package com.quickSort2;

public class QuickSort2App {
public static void main(String[] args) {
int maxSize = 19;
ArrayIns arr = new ArrayIns(maxSize);

for (int i = 0; i < maxSize; i++) {
int n = (int) (Math.random() * 99);
arr.insert(n);
}
arr.display();
System.out.println();
arr.quickSort();
arr.display();
}
}

原文地址:https://www.cnblogs.com/xunmengyoufeng/p/2713271.html