当前位置:   article > 正文

快速排序---算法

快速排序---算法

1、算法概念

快速排序:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的数据均比另一部分的数据小,则可分别对这两部分记录继续进行排序,以达到震哥哥序列有序。

        快速排序的最坏运行情况是O(n^{2}),比如说顺序数列的快排。但它的平摊期望时间是O(n\log{n}),且(n\log{n})记号中隐含的常数因子很小,比复杂度稳定等于O(n\log{n})归并排序要小很多。所以,对绝大多数顺序性较弱的随机数列而言,快速排序总是由于归并排序。

2、算法步骤

  • 从数列中挑出一个元素,称为“基准”。
  • 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的书可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区操作
  • 递归地把小于基准值元素的子数列和大于基准值元素的子数列排序
  1. public static int[] quicksort(int[] arr,int left,int right){
  2. if (left < right){
  3. int p = partition(arr,left,right);
  4. quicksort(arr,left,p-1);
  5. quicksort(arr,p+1,right);
  6. }
  7. return arr;
  8. }
  9. public static int partition(int[] arr, int left, int right) {
  10. //色号顶基准值pivot
  11. int pivot = left;
  12. int index = pivot+1;
  13. for (int i = index; i <= right; i++) {
  14. if (arr[i] < arr[pivot]) {
  15. swap(arr,i,index);
  16. index++;
  17. }
  18. }
  19. swap(arr,pivot,index-1);
  20. return index-1;
  21. }
  22. public static void swap(int[] arr, int i, int j) {
  23. int temp = arr[i];
  24. arr[i] = arr[j];
  25. arr[j] = temp;
  26. }

例题

https://www.lanqiao.cn/problems/3225/learning/

  1. public class _04快速排序 {
  2. public static void main(String[] args) {
  3. Scanner sc = new Scanner(System.in);
  4. int n = sc.nextInt();
  5. int[] arr = new int[n];
  6. for (int i = 0; i < n; i++) {
  7. arr[i] = sc.nextInt();
  8. }
  9. arr = quicksort(arr,0,n-1);
  10. for (int i = 0; i < n; i++) {
  11. System.out.print(arr[i]+" ");
  12. }
  13. }
  14. public static int[] quicksort(int[] arr,int left,int right){
  15. if (left < right){
  16. int p = partition(arr,left,right);
  17. quicksort(arr,left,p-1);
  18. quicksort(arr,p+1,right);
  19. }
  20. return arr;
  21. }
  22. public static int partition(int[] arr, int left, int right) {
  23. //色号顶基准值pivot
  24. int pivot = left;
  25. int index = pivot+1;
  26. for (int i = index; i <= right; i++) {
  27. if (arr[i] < arr[pivot]) {
  28. swap(arr,i,index);
  29. index++;
  30. }
  31. }
  32. swap(arr,pivot,index-1);
  33. return index-1;
  34. }
  35. public static void swap(int[] arr, int i, int j) {
  36. int temp = arr[i];
  37. arr[i] = arr[j];
  38. arr[j] = temp;
  39. }
  40. }
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号