一、快速排序简介
简介:快速排序,基于冒泡排序移动换位思想——通过遍历,判断每个数并放置在数组合适的位置。思路如下:
选定一个基准值pivot(通常指定为数组第一个值),比基准值大的放在右侧,比基准值小的放在左侧
指定左右两个指针分别为left,right ;left < right
指定函数退出条件,即left > right
先从右向左遍历,即右指针向左移动——right–操作,发现比pivot小的值暂停移动
再从左向右遍历,即左指针向右移动——left++操作,发现比pivot大的值暂停移动
交换左右指针发现的两个值的位置
当两指针相遇,即left == right,当前值与pivot交换位置
二、代码如下(示例):
public static void quickSort(double value[],int left,int right){
//判断快速排序结束的时间点
if(left >= right){
return;
}
//定义基准数
double base = value[left];
int i = left;
int j = right;
//找到第一个比基准数小的数据
while(i < j){
while(value[j] >= base && i < j){
j--;
}
while(value[i] <= base && i < j){
i++;
}
if(i < j){
double temp = value[i];
value[i] = value[j];
value[j] = temp;
}
}
//交换 i[j] 和基准数位置的值
double temp = value[i];
value[i] = base;
value[left] = temp;
//左半区
quickSort(value,left,i-1);
quickSort(value,i+1,right);
}