• 快速排序(Quick Sort)


    简介

     

            快速排序(Quicksort),计算机科学词汇,适用领域Pascal,c++等语言,是对冒泡排序算法的一种改进。

    基本思想

            通过一次排序将要排序的数组分割成两部分,其中一部分所有数据都比另一部分的所有数据小,按照这样的方式对两组数据进行快速排序,应当用递归实现,最终目的是将整个数组变成有序的数组。

    流程

    ☞首先设定一个分截止,通过该分截止将数组分成两部分

    ☞将大于或等于分截止的数据集中到数组的右边,小于分界值的数据集中到数组的左边。这时候,左边的各个元素都小雨分界值,右边的所有元素都大于等于分界值。

    ☞然后,左边和右边的数据可以独立排序。对于左边的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放较小值,右边放较大值。右边的数组数据也可以取分界值……

    ☞重复上述过程,直到排序结束

    下图中蓝色数字是基准数,每行是一个步骤。

    快速排序代码 

    1. #include
    2. #include
    3. using namespace std;
    4. const int maxn=100001;
    5. int a[maxn];
    6. void qsort(int left,int right)
    7. {
    8. if(left>right)
    9. {
    10. return;
    11. }
    12. int i=left,j=right,temp=a[left];
    13. while(i
    14. {
    15. while(i=temp)
    16. {
    17. j--;
    18. }
    19. while(i
    20. {
    21. i++;
    22. }
    23. if(i
    24. {
    25. swap(a[i],a[j]);
    26. }
    27. }
    28. swap(a[left],a[i]);
    29. qsort(left,i-1);
    30. qsort(i+1,right);
    31. }
    32. int main()
    33. {
    34. int n;
    35. cin>>n;
    36. for(int i=0; i
    37. {
    38. cin>>a[i];
    39. }
    40. qsort(0,n-1);
    41. for(int i=0; i
    42. {
    43. cout<" ";
    44. }
    45. cout<<'\n';
    46. return 0;
    47. }

    例题

    输出前k打的数

    题目描述
    给定一个数组,统计前k大的数并且把这k个数从大到小输出

    输入INPUT:

    输入格式

    第一行包含一个整数n,表示数组的大小。n < 100000。 第二行包含n个整数,表示数组的元素,整数之间以一个空格分开。每个整数的绝对值不超过100000000。 第三行包含一个整数k,k

    输入样例

    10 4 5 6 9 8 7 1 2 3 0 5

    输出OUTPUT:

    输出格式

    从小到大输出前k大的数,每个数一行。

    输出样例

    9 8 7 6 5

    思路

    先快速排序,再输出即可。

    代码

    1. #include
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. int a[100010];
    7. void qsort(int l,int r)
    8. {
    9. int i=l,j=r,mid=a[(l+r)/2];
    10. do{
    11. while (a[i]>mid) i++;
    12. while (a[j]
    13. if (i<=j)
    14. {
    15. int tmp=a[i];
    16. a[i]=a[j];
    17. a[j]=tmp;
    18. i++;
    19. j--;
    20. }
    21. }while (i<=j);
    22. if (iqsort(i,r);
    23. if (lqsort(l,j);
    24. }
    25. int main()
    26. {
    27. int n,k;
    28. scanf("%d",&n);
    29. for(int i=0;i
    30. scanf("%d",&a[i]);
    31. scanf("%d",&k);
    32. qsort(0,n-1);
    33. for (int j=0;j
    34. printf("%d\n",a[j]);
    35. return 0;
    36. }

    感谢阅读。

  • 相关阅读:
    Go-Excelize API源码阅读(四十)——SetCellRichText
    26. 【Linux教程】Linux 查看环境变量
    人工智能值不值得学习?人工智能就业方向及前景
    【工具插件类教学】三种常用日期选择UI控件工具
    6.swagger完善:界面显示注释+多版本控制
    OpenVoiceV2本地部署教程,苹果MacOs部署流程,声音响度统一,文字转语音,TTS
    在CentOS下安装MySQL
    CentOS部署Apache服务
    【无标题】
    中科数安|公司办公终端、电脑文件数据 \ 资料防泄密系统
  • 原文地址:https://blog.csdn.net/weixin_46522531/article/details/126394705