快速排序是在冒泡排序基础上的递归分治法
1、定义一个int类型的基准值 value (一般是数组0索引处的值),左指针 i 和右指针 j
int i;//左指针
int j;//右指针
int temp;//元素交换过渡区
int value;//基准值,用于判断
2、因为基准值在右边,索引我们先移动左指针,找到比基准值小的元素
while (i < j && value <= array[j]){
j--;
}
3、然后移动右指针,找到比基准值大的元素
while (i < j && value >= array[i]){
i++;
}
4、交换左指针和右指针指向的元素
//成立,则交换
if (i < j){
temp = array[j];
array[j] = array[i];
array[i] = temp;
}
5、当左指针和右指针相等,把基准值赋值和左右指针指向的元素交换位置
//最后将基准为与i和j相等位置的数字交换
array[low] = array[i];
array[i] = value;
6、递归调用,重复以上步骤
//递归调用
sort(array,low,j-1);
sort(array,j+1,high);
源代码
public class Test__ {
public static void sort(int[] array,int low,int high) {
int i;//左指针
int j;//右指针
int temp;//元素交换过渡区
int value;//基准值,用于判断
//判断左是否大于右,是,则return
if (low > high) {
return;
}
i = low;
j = high;
//一般定义数组0索引元素
value = array[low];
//判断左指针是否小于右指针
while (i < j){
//判断左指针是否小于右指针 并且右边的第一个值是大于基准值
while (i < j && value <= array[j]){
j--;
}
//判断左指针是否小于右指针 并且左边的第一个值是小于基准值
while (i < j && value >= array[i]){
i++;
}
//成立,则交换
if (i < j){
temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
//最后将基准为与i和j相等位置的数字交换
array[low] = array[i];
array[i] = value;
//递归调用
sort(array,low,j-1);
sort(array,j+1,high);
}
public static void main(String[] args) {
int[] array = new int[]{5, 6, 4, 3, 7, 9, 8 , 1, 0, 2};
sort(array,0, array.length - 1);
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
输出
0 1 2 3 4 5 6 7 8 9