快速排序(Java)
只需要掌握一种就好
- 快速排序–双边循环
package com.richard.sort;
/**
* 快速排序--双边循环
*/
public class QuickSort1 {
// 递归排序
public static void quick(int[] arr, int start, int end) {
// 递归结束
if (start >= end) {
return ;
}
// 获得基准元素位
int pivot = pivot(arr,start, end);
quick(arr, start, pivot-1);
quick(arr, pivot+1, end);
}
/**
* 返回基准位
* @return
*/
private static int pivot(int[] arr, int start, int end) {
// 取基准元素
int pivot = arr[start];
int left = start;
int right = end;
while (left != right) {
// 右指针左移
while (left < right && arr[right]>pivot) {
right--;
}
// 左指针右移
while (left < right && arr[left]<=pivot) {
left++;
}
// 左右交换
if (left < right) {
int t = arr[left];
arr[left] = arr[right];
arr[right] = t;
}
}
// 交换指针重合点 交换pivot和重合点
arr[start] = arr[left];
arr[left] = pivot;
return left;
}
public static void main(String[] args) {
int[] arr = {4,7,3,5,6,2,8,1};
quick(arr,0, arr.length-1);
for (int i : arr) {
System.out.println(i);
}
}
}
2.快速排序–单边循环
package com.richard.sort;
/**
* 快速排序--单边循环
*/
public class QuickSort2 {
// 递归排序
public static void quick(int[] arr, int start, int end) {
// 递归结束
if (start >= end) {
return ;
}
// 获得基准元素位
int pivot = pivot(arr,start, end);
quick(arr, start, pivot-1);
quick(arr, pivot+1, end);
}
/**
* 返回基准位
* @return
*/
private static int pivot(int[] arr, int start, int end) {
// 取基准元素
int pivot = arr[start];
int mark = start;
for (int i=start+1; i<=end; i++) {
if (arr[i]<pivot) {
mark++;
int t = arr[i];
arr[i] = arr[mark];
arr[mark] = t;
}
}
// 交换指针重合点 交换pivot和重合点
arr[start] = arr[mark];
arr[mark] = pivot;
return mark;
}
public static void main(String[] args) {
int[] arr = {4,7,3,5,6,2,8,1};
quick(arr,0, arr.length-1);
for (int i : arr) {
System.out.println(i);
}
}
}
312

被折叠的 条评论
为什么被折叠?



