public static void quickSort(int[] arr, int L, int R){
if (L>=R) {
return; //终止递归环
}
int i=L;
int j=R;
int key = arr[L];
while(i<j){
//j向前平移的操作
// j在不断向前平移找第一个小于key元素
// 平移循环的结束 有两种可能
// 1找到满足条件的元素 break 结束循环
// 2 j变小 和i 同位置 没找到
while(i<j){
if (arr[j]<key) {
arr[i] = arr[j];
i++;
break;
}
j--;
}
//i向后平移的操作
// i在不断向后平移找第一个大于key元素
// 平移循环的结束 有两种可能
// 1找到满足条件的元素 break 结束循环
// 2 i变大 和j 同位置 没找到
while(i<j){
if (arr[i]>key) {
arr[j]=arr[i];
j--;
break;
}
i++;
}
}
//i和j汇合
arr[j] = key;
//递归 L~j-1
quickSort(arr, L, j-1);
//递归 j+1~R
quickSort(arr, j+1, R);
}
public static void main(String[] args) {
/*-----快速排序------
* 时间复杂度 O(n*log(n))
* */
/*递归实现
* L R
*...2 1 3 8 6 7 9 4 5 ....
* ij
*
*key = arr[L]
*i = L
*j = R
*while(i<j) 只要i==j 循环立即结束
* j向前移动 找第一个比 key小的元素
* 若找到则 将 arr[i] = arr[j] i++
* i向后移动 找第一个比可以大的元素
* 若找到则 将 arr[j] = arr[i] j--
*
*arr[i] = key
* */
int[] arr = {4,1,5,9,2,7,6,8,3};
quickSort(arr, 0, 8);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
}
if (L>=R) {
return; //终止递归环
}
int i=L;
int j=R;
int key = arr[L];
while(i<j){
//j向前平移的操作
// j在不断向前平移找第一个小于key元素
// 平移循环的结束 有两种可能
// 1找到满足条件的元素 break 结束循环
// 2 j变小 和i 同位置 没找到
while(i<j){
if (arr[j]<key) {
arr[i] = arr[j];
i++;
break;
}
j--;
}
//i向后平移的操作
// i在不断向后平移找第一个大于key元素
// 平移循环的结束 有两种可能
// 1找到满足条件的元素 break 结束循环
// 2 i变大 和j 同位置 没找到
while(i<j){
if (arr[i]>key) {
arr[j]=arr[i];
j--;
break;
}
i++;
}
}
//i和j汇合
arr[j] = key;
//递归 L~j-1
quickSort(arr, L, j-1);
//递归 j+1~R
quickSort(arr, j+1, R);
}
public static void main(String[] args) {
/*-----快速排序------
* 时间复杂度 O(n*log(n))
* */
/*递归实现
* L R
*...2 1 3 8 6 7 9 4 5 ....
* ij
*
*key = arr[L]
*i = L
*j = R
*while(i<j) 只要i==j 循环立即结束
* j向前移动 找第一个比 key小的元素
* 若找到则 将 arr[i] = arr[j] i++
* i向后移动 找第一个比可以大的元素
* 若找到则 将 arr[j] = arr[i] j--
*
*arr[i] = key
* */
int[] arr = {4,1,5,9,2,7,6,8,3};
quickSort(arr, 0, 8);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
}