2.快速排序
算法描述:O(nlog2n),不稳定
- 从数列中挑出一个元素,称为 “基准” ,每趟从数据序列的两端开始交替执行
- 分区操作:重新排列数列,比基准小的放在基准前面,比基准大的,放在基准后面,相等的则可以到任一边
- 递归的将小于基准元素的子数列和大于基准元素的子数列排序
//快速排序
/*
1.设置两个变量i,j,排序开始的时候i=0;j=6;
2.以第一个数组元素作为关键数据,赋值给key,即key=a[0];
3.从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值,两者交换;
4.从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的值,两者交换;
5.重复第3、4步,直到i=j;此时将key赋值给a[i];
*/
public static int[] quickSort(int[] num, int left, int right) {
if (num == null) {
return null;
}
if (left >= right) {//如果左边大于右边,则return,这里是递归的终点,需要写在前面
return num;
}
int i = left;
int j = right;
int temp = num[i];//此处开始进入遍历循环
while (i < j) { //从右往左循环
while (i < j && num[j] > temp) {//如果num[j]大于temp值,则pass,比较下一个
j--;
}
num[i] = num[j];
while (i < j && num[i] < temp) {
i++;
}
num[j] = num[i];
num[i] = temp;// 此处不可遗漏,将基准值插入到指定位置
}
quickSort(num, left, i - 1);
quickSort(num, i + 1, right);
return num;
}
}