快速排序原理:快速排序实际上是采用二分法和递归的思想来实现数组排序。第一步是使用数组第一个数作为参考数,将数组按照大于或小于参考数分为两部分,再采用递归的方式对两部分进行同样操作,直到被拆分的部分只有一个数。
假设数组:5,8,7,3,6,2,9,1,4。采用快速排序算法的流程如下:
第一步:将第一个数5作为参考,将5从最后一位数开始逆序进行比较,直到找到小于5的数,交换两者位置,当比较到倒数第二位数,此时5大于1,交换位置。
接下来,从1开始找出大于5的元素,交换5与8的位置。
再从5与8之间找到小于5的数,交换位置,直到5的左边全部小于5,右边全部大于5。如下:
此时,已完成了5的排序,5的位置将不再变化。之后再用同样方式对5前面部分和后面部分进行操作。
以前面部分为例:对1,2,4,3进行排序。
由于1小于其他数,那么再次进行递归操作,对2,4,3进行排序,直到完成4,3排序。那么,前面部分的排序也就完成了。
实现代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25public static int[] sort(int arr[], int start, int end) { int pivot = arr[start]; int i = start; int j = end; while (i < j) { while ((i < j) && (arr[j] > pivot)) { j--; } while ((i < j) && (arr[i] < pivot)) { i++; } if ((arr[i] == arr[j]) && (i < j)) { i++; } else { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } if (i - 1 > start) arr = sort(arr, start, i - 1); if (j + 1 < end) arr = sort(arr, j + 1, end); return arr; }
测试:
复制代码
1
2
3
4
5
6
7public static void main(String[] args) { int[] arr = new int[] {5,8,7,3,4,2,9,1,6}; arr = sort(arr, 0, arr.length - 1); for(int i : arr) { System.out.println(i); } }
输出结果:
最后
以上就是真实钢笔最近收集整理的关于java排序算法之快速排序的全部内容,更多相关java排序算法之快速排序内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复