快速排序(Quicksort)是对冒泡排序的一种改进。
快速排序实现:就是先选一个基点,然后设置两个指针 i 和 j 在数组的头部和尾部,然后如果选的元素如果大于基点的移动到基点的前面,反之移动到基点的后面,然后如果 i 和 j 重合,也就是 i = j 的时候结束循环,利用分治的实现基点的两侧的元素,递归进行求解。如果不懂请看下面代码:
private static void kuaipai(int[] arr, int left, int right) { if (left >= 0 && left < arr.length && right >= 0 && right < arr.length && left < right) { int i = left; int j = right; int vol = arr[i]; while (i != j) { while (i < j && arr[j] >= vol) { j--; } if (i < j) { arr[i++] = arr[j]; } while (i < j && arr[i] <= vol) { i++; } if (i < j) { arr[j--] = arr[i]; } } arr[i] = vol; kuaipai(arr, left, i - 1); kuaipai(arr, j + 1, right); } }
几道简单的习题可以刷一下:
hdu2083 http://acm.hdu.edu.cn/showproblem.php?pid=2083
hdu1425 http://acm.hdu.edu.cn/showproblem.php?pid=1425
hdu1040 http://acm.hdu.edu.cn/showproblem.php?pid=1040