public class quickSort {
// 占坑法
public static void quickSort(int a[], int start, int end) {
if (start >= 0 && end <= a.length - 1 && start < end) {
int low = start;
int high = end;
int splitKey = a[start];
while (start < end) {
while (start < end && a[end] >= splitKey) end--;
a[start] = a[end];
while (start < end && a[start] <= splitKey) start++;
a[end] = a[start];
}
a[end] = splitKey;
quickSort(a, low, start - 1);
quickSort(a, start + 1, high);
}
}
// 交换法
public static void quickSort2(int a[], int start, int end) {
int left = start;
int right = end;
if (start >= 0 && end <= a.length - 1 && start < end) {
int key = a[start];
while (start < end) {
while (start < end && a[end] >= key) {
end--;
}
while (start < end && a[start] <= key) {
start++;
}
if (start < end) {
int temp = a[end];
a[end] = a[start];
a[start] = temp;
}
}
// 交换标志位
a[left] = a[start];
a[start] = key;
quickSort2(a, left, start - 1);
quickSort2(a, start + 1, right);
}
}
public static void quickSort(int a[]) {
quickSort(a, 0, a.length - 1);
}
public static void print(int a[], int left, int right){
System.out.print(" 交换:a["+ left +"]=a["+right+"] ");
for (int i = 0; i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println();
}
public static void main(String[] args){
int[] a = {3,5,9,4,7,4,2,1,6};
print(a, 0,0);
quickSort(a);
quickSort2(a,0,8);
System.out.println(a);
}
}
快速排序算法
最新推荐文章于 2022-09-21 10:12:32 发布