排序算法之快速排序

系统管理员 2022-01-22 10:29 373阅读 0赞

快速排序是冒泡排序的改进版,也是最好的一种内排序,也是作为程序员必须掌握的一种排序方法。

快速排序的基本思想是

1、先从数列中取出一个数作为基准数

2、分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边

3、再对左右区间重复第二步,直到各区间只有一个数

所以我是把快速排序联想成东拆西补或西拆东补,一边拆一边补,直到所有元素达到有序状态。

下面再看看示图理解下吧:

280754329387398.png

下面是快速排序的C++代码:

  1. //
  2. // Created by liushihao on 19-6-5.
  3. //
  4. #include "iostream"
  5. using namespace std;
  6. typedef int KeyType;
  7. typedef struct
  8. {
  9. KeyType key;
  10. int data;
  11. }RecType;
  12. int partition(RecType R[], int s,int t)
  13. {
  14. int i=s,j=t;
  15. RecType tmp=R[i];
  16. while(i<j)
  17. {
  18. while(j>i && R[j].key>=tmp.key)
  19. j--;
  20. R[i]=R[j];
  21. while(i<j && R[i].key<=tmp.key)
  22. i++;
  23. R[j]=R[i];
  24. }
  25. R[i]=tmp;
  26. return i;
  27. }
  28. void QuickSort(RecType R[], int s, int t)
  29. {
  30. int i;
  31. if(s<t)
  32. {
  33. i=partition(R, s, t);
  34. QuickSort(R, s, i-1);
  35. QuickSort(R, i+1, t);
  36. }
  37. }
  38. int main()
  39. {
  40. int n;
  41. cin>>n;
  42. RecType R[n];
  43. for(int i=0;i<n;i++)
  44. {
  45. cin>>R[i].key;
  46. }
  47. for(int i=0;i<n;i++)
  48. {
  49. cout<<R[i].key<<" ";
  50. }
  51. QuickSort(R, 0, n-1);
  52. cout<<endl;
  53. for(int i=0;i<n;i++)
  54. {
  55. cout<<R[i].key<<" ";
  56. }
  57. return 0;
  58. }

发表评论

表情:
评论列表 (有 0 条评论,373人围观)

还没有评论,来说两句吧...

相关阅读

    相关 排序算法快速排序

    快速排序是一种基于分治思想的排序算法。它的基本思想是通过一趟排序将待排数据分割成独立的两部分,其中一部分的所有元素都比另一部分的所有元素小,然后再分别对这两部分继续进行排序,重

    相关 排序算法快速排序

    \[交换排序-快速排序\] 1.算法思想: 选择一个元素作为基准,先从右向左遍历数组寻找比基准小的数a,然后从左向右寻找比基准大的数b,交换a和b的值,当左右会面

    相关 排序算法快速排序

    > 快速排序。 > 从数组中取出一个基准数,遍历数组中的每个元素,与基准数比较大小,将小于基准数的元素放在其左侧,大于基准数的元素放在其右侧, >

    相关 排序算法快速排序

    同样的先上这张图  ![Center][] 下面分析交换排序之快速排序: 快速排序的思想是先选择一个基准元素(一般取第一个元素),然后对剩下的元素作两端遍历,左边找

    相关 排序算法快速排序

    快速排序的基本思想是:通过一趟排序将要排序的[数据分割][Link 1]成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行

    相关 排序算法快速排序

    快速排序是冒泡排序的改进版,也是最好的一种内排序,也是作为程序员必须掌握的一种排序方法。 快速排序的基本思想是 > 1、先从数列中取出一个数作为基准数 > 2、分区过程,

    相关 排序算法快速排序

    快速排序是一种高效的排序算法,它采用分而治之的思想,把大的拆分成小的,小的再拆分为更小的。 其原理是:对于给定的数组,通过一趟排序之后,将原序列分为两部分,其中前一部分的所