Java数据结构与算法–快速排序
1.快速排序思想与原理
快速排序是综合性无序排序比较强的方法,但对于基本有序的数组,快排就慢的很多
1.1基本思想:
通过一趟排序将数据分割为前后两个部分,第一部分所有数据比第二组小(前面)然后分别继续快排,使用递归实现。
1.2时间复杂度与空间复杂度
平均时间复杂度 | 最好情况 | 最坏情况 | 空间复杂度 | 排序方式 | 稳定性 |
---|---|---|---|---|---|
O(n log n) | O(n log n) | O(n^2) | O(log n) | 内部排序 | 不稳定 |
1.3原理
就是在一组数据中找到一个轴值(一般是第一个数),然后从后往前扫,在待排数据中比轴值小的数放在待排数据的前面,然后从前往后扫,比轴值大的放在数据后面。然后左右大致已经分好大小区域,这时使用递归将左右元素继续排序。下面代码中教材代码为:49、38、65、97、76、13、27。其实是数据结构课的作业稍作修改。
算法代码:
1 | //快排方法 |
然后测试代码中,为了熟悉Java中的Scanner类,就修改了一下:
1 | public class QuickSort {//测试代码 |
输入代码:
1 | /*输入数组*/ |
教材代码:
1 | /*教材数组*/ |
最后附上全套粘贴就能用的代码(QuickSort.java):
1 | import java.util.Scanner;//导入Scanner类 |