快速排序while循环先执行high--的原因
Posted 任猜何意
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序while循环先执行high--的原因相关的知识,希望对你有一定的参考价值。
package com.lancao.learn.hashmap;
import org.junit.Test;
/**
* 排序算法测试
*/
public class SortTests {
@Test
public void testSort() {
int[] array = new int[]{10, 8, 3, 40, 2, 5, 3, 6, 4, 7, 9};
// 简单冒泡排序
// simpleBubbleSort(array);
// 鸡尾酒排序
// cocktailSort(array);
// 快速排序
quickSort(array, 0, array.length - 1);
System.out.println("排序后的数列:");
// 打印排序后的数组
printArray(array);
}
private static void printArray(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + ", ");
}
}
/**
* 快速排序
*/
private static void quickSort(int[] array, int start, int end) {
if (start >= end) {
return;
}
int mid = partition(array, start, end);
quickSort(array, start, mid - 1);
quickSort(array, mid + 1, end);
}
private static int partition(int[] array, int start, int end) {
int low = start;
int high = end;
int pivot = array[low];
while (low < high) {
while (low < high && array[low] <= pivot) {
low++;
}
while (low < high && array[high] > pivot) {
high--;
}
if (low < high) {
int temp = array[low];
array[low] = array[high];
array[high] = temp;
}
}
array[start] = array[low];
array[low] = pivot;
return low;
}
}
然后跑了下test,神奇的事情发生了:
package com.lancao.learn.hashmap;
import org.junit.Test;
/**
* 排序算法测试
*/
public class SortTests {
@Test
public void testSort() {
int[] array = new int[]{10, 8, 3, 40, 2, 5, 3, 6, 4, 7, 9};
// 简单冒泡排序
// simpleBubbleSort(array);
// 鸡尾酒排序
// cocktailSort(array);
// 快速排序
quickSort(array, 0, array.length - 1);
System.out.println("排序后的数列:");
// 打印排序后的数组
printArray(array);
}
private static void printArray(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + ", ");
}
}
/**
* 快速排序
*/
private static void quickSort(int[] array, int start, int end) {
if (start >= end) {
return;
}
int mid = partition(array, start, end);
quickSort(array, start, mid - 1);
quickSort(array, mid + 1, end);
}
private static int partition(int[] array, int start, int end) {
int low = start;
int high = end;
int pivot = array[high];
while (low < high) {
while (low < high && array[low] < pivot) {
low++;
}
while (low < high && array[high] >= pivot) {
high--;
}
if (low < high) {
int temp = array[low];
array[low] = array[high];
array[high] = temp;
}
}
array[end] = array[high];
array[high] = pivot;
return high;
}
}
以上是关于快速排序while循环先执行high--的原因的主要内容,如果未能解决你的问题,请参考以下文章
快速排序 c++ while(low<high&&a[high]>=pivotkey) --high; 实现的是啥功能???这句啥意思???