快速排序是平均速度最快的排序算法,他的平均时间复杂度 n*log n)
快速排序采用分治法来进行排序,首先先给出一个数组,在一开始随意选择一个数pivot,已pivot作为这个数组的分界点,把大于pivot的数放在右边,小于pivot的数放在左边,然后在已pivot的两边分界点,右进行一次上一次的操作,这样就能达到排序的目的了,
好了,我们来看一下代码。
private static void partition(int[] array,int left,int right) {//这里是传递的数组与最左边点与最右边点
int i = left,j=right;
int pivot =array[(left+right)/2];//我们已将这个数组的最中间的值作为分界点
while (i<=j) { //当中间的值与两边的值比较与交换完,结束循环,递归另外两个被分割的数组
while (array[i]<pivot) {//从传递进来的最左边开始如果array[i]小于中间值就那么下边就往右 移动一次
i++;
}
while (array[j]>pivot) {
//如果array[j]大于中间值就那么下边就往左 移动一次
j--;
}
if (i<=j) {//当已中间值为分界点的两边,没有比较完就交换
int temp=array[i];
array[i]=array[j];
array[j]=temp;
i++;
j--;
/*
*如果两边都满足了条件就交换位置,然后位置都向前移动
*/
}
}
//第一次中间点比较完之后,就要开始比较另外两边了
if (left<j) {
partition(array, left, j);
}
if (i<right) {
partition(array, i, right);
}
}
这段代码就是快速排序了,我们对这个数组进行了,分治法,首先把一个数组分成两个数组,两个数组要中间值对两个数比较完了之后又会把这和两个交换完的数组分成4个数组,进行找中间值,比较操作。
我们来看一下结果