快速排序二

在划分的基础上进行快速排序:

思路:递归调用快速排序(recQuickSort(left,right))方法,pivot选取节点right的值(改进时可以将pivot设置为数据项最左端,最右端,和中间值的平均值)

if(left<=right)

   return;

else {
  int pivot = arr[right];
  int position = partitionIt(left, right, pivot);
  recQuickSort(left, position - 1);
  recQuickSort(position + 1, right);
}

 

 

源代码:

package com.quickSort;

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) {
if (right - left <= 0)
return;
else {
int pivot = arr[right];
int position = partitionIt(left, right, pivot);
recQuickSort(left, position - 1);
recQuickSort(position + 1, right);
}
}

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

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

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

 

package com.quickSort;

public class QuickSort1App {
public static void main(String[] args){
int maxSize = 10;
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();
}
}

posted @ 2012-10-06 11:02  寻梦尤风  阅读(165)  评论(0编辑  收藏  举报