java实现快速排序算法及其思想
可以去我的博客看详细解析与简单易懂的原理:(本人博客为个人学习心得,仅供参考)
振云博客:http://zhenyunboy.icu/?p=382](http://zhenyunboy.icu/?p=382
public class fast { public static void main(String[] args) { int a[] = { 1, 5, 9, 6, 8, 2, 3, 7, 10 }; que(a, 0, a.length - 1); for (int i : a) { System.out.print(i + " "); } } /** * 快速排序 空间复杂度也为O(logn) O (nlogn) */ public static void que(int array[], int left, int righ) { //如果传入进来的左参数left(从左往右数第一个)大于右参数righ(最后一个) //在这里就直接返回 if (left > righ) { return; } // 定义一个基本数,也就是接下来要和每一个参数对比的基本元素 int base = array[left]; //定义初始化i的位置,也就是从哪里开始向右移动 int i = left; //定义初始化j的位置,也就是从哪里开始向左边移动 int j = righ; // i和j移动, // i向右移动找出数组元素大于基本数base,j向左边移动数组元素小于基本数base,直到相等循环停止 //在i和j移动的过程中没有相遇时就一直循环,直到相遇为止 while (i != j) { // j向左边移动,只有当元素大于等于基本数,j才左移 while (array[j] >= base && i < j) { //j从右边向左边移动 j--; } // i向右移,只有当元素小于等于基本数,i才右移 while (array[i] <= base && i < j) { //i从左边向右边移动 i++; } // 当移动停止说明找到了该元素,就交换位置 int temp = 0; //将下标为i的元素给temp中间值 temp = array[i]; //将下标为j的元素给下标为i的位置,注意此时i位置是空值 array[i] = array[j]; //将中间值赋值给下标为j的位置,也就是将i位置的值与j位置的值互换 array[j] = temp; } // 当i和j第一次相遇就说明快速排序第一次完成 // 就将最左边的基本数和当前ij相遇位置的元素交换 // ********************************************************* //相遇一次后此时i=j所处位置一样,该位置的值要给到最左边位置上,也就是 //将i或j位置上的值给到首位置上 array[left] = array[i]; //再将基本值,也就是全程与之比较的值给到i或者j的位置 array[i] = base; // ********************************************************* // 到这里后base左边元素全部小于base,右边全部大于base; // 所有左边再次排序,递归 que(array, left, i - 1); // 右边再次排序,递归 que(array, i + 1, righ); } }