当前位置:   article > 正文

每天一个小程序(15)——交换排序之快速排序_小程序 图片位置交换

小程序 图片位置交换

      快速排序法原理也是用了分治法,主要原理是将数组分为A[p..q-1] 和A[q+1..r],然后调整元素使得A[p..q-1]小于等于q,也小于等于A[q+1..r]。然后不断的递归,到最后就排序完成。

      通俗的话语讲就是,排序之前选择一个标志数据(一般选择最后一个),然后第一次排序中,以此标记数据为基准,小于它的放在“小数据区”,比如左半边区,大于它的放在“大数据区”,比如右半边区,然后得到中间的位置,以此位置将程序分为宏观有序(左半边区之和小于右半边区)的两部分,再通过第一步的方法,将这两部分再分成宏观有序的四部分,最后直到不能再继续分位置,则该序列有序。

  1. #include<stdio.h>
  2. void QuickSort(int *A, int p, int r);
  3. int Partition(int *A, int p, int r);
  4. void Display(int *A)
  5. {
  6. for(int i = 0; i < 20; i++)
  7. {
  8. printf("%d ",A[i]);
  9. }
  10. }
  11. void main()
  12. {
  13. int A[] = {5,4,7,1,13,0,322,92,35,19,3,78,-32,45,77,43,933,8,49,11};
  14. QuickSort(A,0,19);
  15. Display(A);
  16. }
  17. void QuickSort(int *A, int p, int r)
  18. {
  19. int q;
  20. if(p < r)
  21. {
  22. q = Partition(A,p,r);
  23. QuickSort(A,p,q - 1);
  24. QuickSort(A,q + 1,r);
  25. }
  26. }
  27. int Partition(int *A, int p, int r)//分治法,作用就是将数组分为A[p..q-1] 和A[q+1..r]
  28. {
  29. int x,i,j,temp;
  30. x = A[r];
  31. i = p - 1;
  32. for(j = p; j <= r - 1; j++)//以A[r]为判断标准,然后调整元素使得A[p..q-1]小于等于A[r],也小于等于A[q+1..r]
  33. {
  34. if(A[j] <= x)//交换
  35. {
  36. i += 1;
  37. temp = A[i];
  38. A[i] = A[j];
  39. A[j] = temp;
  40. }
  41. }
  42. temp = A[i + 1];//交换
  43. A[i + 1] = A[r];
  44. A[r] = temp;
  45. return i+1;
  46. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/572770
推荐阅读
相关标签
  

闽ICP备14008679号