• 经典算法之快速排序


     

     活动地址:CSDN21天学习挑战赛 

     作者简介:大家好我是小唐同学(๑>؂<๑),为梦想而奋斗的小唐,让我们一起加油!!!

    个人主页:小唐同学(๑>؂<๑)的博客主页

    系列专栏:数据结构

    博友们如果也是新手入门数据结构我希望大家可以多加练习 数据结构题库在牛客网就有已经给大家附上链接,可以直接点击跳转:刷题点这里

    牛客网支持ACM模式哦,刷算法题也很推荐哦!!!

    下面上文章------》

    目录

    快排思想:

     上全代码:

    第一部分:

    第二部分:

    题解样例:

    题目描述

    输入格式

    输出格式

    输入输出样例

    说明/提示


    快排思想:

    快速排序的排序速度是非常快的,效率较高,再加上快速排序思想----分治法和递归也确实实用,

    该方法的基本思想是:

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

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

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

    相对于冒泡排序来说,快速排序是从两边进行判断。

     上全代码:

    1. # include
    2. using namespace std;
    3. int a[100010];
    4. void qsortt(int a[],int l,int r)
    5. {
    6. if(l>=r)
    7. {
    8. return ;
    9. }
    10. int pivot=a[l];
    11. int left=l;
    12. int right=r;
    13. while(left
    14. {
    15. while(left=pivot)
    16. {
    17. right--;
    18. }
    19. if(left//说明 a[right]
    20. {
    21. a[left]=a[right]; //把最左值覆盖 因为有pivot可以暂存
    22. }
    23. while(left//进行完右边进行左边
    24. {
    25. left++;
    26. }
    27. if(left//说明 a[left]>pivot 右调
    28. {
    29. a[right]=a[left]; // 此时right的值已经调走
    30. }
    31. if(left>=right)
    32. {
    33. a[left]=pivot;
    34. }
    35. //上边是进行初次排序
    36. //下边是分治 左右
    37. }
    38. qsortt(a,l,right-1);//最初位置到 pivot位置的前一个
    39. qsortt(a,right+1,r); // 从pivot位置的下一个到最后
    40. }
    41. int main()
    42. {
    43. int n;
    44. cin>>n;
    45. int a[n];
    46. for(int i=0;i
    47. {
    48. cin>>a[i];
    49. }
    50. qsortt(a,0,n-1);
    51. for(int i=0;i
    52. {
    53. cout<" ";
    54. }
    55. }

    第一部分:

    1. int pivot=a[l];
    2. int left=l;
    3. int right=r;

    把基准数进行存储   左右结尾进行赋值

    第二部分:

    1. while(left<right)
    2. {
    3. while(left<right&&a[right]>=pivot)
    4. {
    5. right--;
    6. }
    7. if(left<right) //说明 a[right]<pivot 需要移位pivot左边
    8. {
    9. a[left]=a[right]; //把最左值覆盖 因为有pivot可以暂存
    10. }
    11. while(left<right&&a[left]<=pivot)//进行完右边进行左边
    12. {
    13. left++;
    14. }
    15. if(left<right) //说明 a[left]>pivot 右调
    16. {
    17. a[right]=a[left]; // 此时right的值已经调走
    18. }
    19. if(left>=right)
    20. {
    21. a[left]=pivot;
    22. }
    23. //上边是进行初次排序
    24. //下边是分治 左右
    25. }
    26. qsortt(a,l,right-1);//最初位置到 pivot位置的前一个
    27. qsortt(a,right+1,r); // 从pivot位置的下一个到最后
    28. }

    题解样例:

    题目描述

    利用快速排序算法将读入的 NN 个数从小到大排序后输出。

    快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++ 选手请不要试图使用 STL,虽然你可以使用 sort 一遍过,但是你并没有掌握快速排序算法的精髓。)

    输入格式

    第 11 行为一个正整数 NN,第 22 行包含 NN 个空格隔开的正整数 a_iai​,为你需要进行排序的数,数据保证了 A_iAi​ 不超过 10^9109。

    输出格式

    将给定的 NN 个数从小到大输出,数之间空格隔开,行末换行且无空格。

    输入输出样例

    输入 #1复制

    5
    4 2 4 5 1

    输出 #1复制

    1 2 4 4 5

    说明/提示

    对于 20\%20% 的数据,有 N\leq 10^3N≤103;

    对于 100\%100% 的数据,有 N\leq 10^5N≤105。

    1. # include
    2. using namespace std;
    3. int a[100010];
    4. void qsort(int a[],int l,int r)
    5. {
    6. if(l>=r)
    7. {
    8. return ;
    9. }
    10. int pivot=a[l];
    11. int left=l;
    12. int right=r;
    13. while(left
    14. {
    15. while(left=pivot)
    16. {
    17. right--;
    18. }
    19. if(left//说明 a[right]
    20. {
    21. a[left]=a[right]; //把最左值覆盖 因为有pivot可以暂存
    22. }
    23. while(left//进行完右边进行左边
    24. {
    25. left++;
    26. }
    27. if(left//说明 a[left]>pivot 右调
    28. {
    29. a[right]=a[left]; // 此时right的值已经调走
    30. }
    31. if(left>=right)
    32. {
    33. a[left]=pivot;
    34. }
    35. //上边是进行初次排序
    36. //下边是分治 左右
    37. }
    38. qsort(a,l,right-1);//最初位置到 pivot位置的前一个
    39. qsort(a,right+1,r); // 从pivot位置的下一个到最后
    40. }
    41. int main()
    42. {
    43. int n;
    44. cin>>n;
    45. int a[n];
    46. for(int i=0;i
    47. {
    48. cin>>a[i];
    49. }
    50. qsort(a,0,n-1);
    51. for(int i=0;i
    52. {
    53. cout<" ";
    54. }
    55. }

  • 相关阅读:
    AJAX和JSON
    java使用jol打印对象信息
    本地服务启动慢问题及dubbo测试方法记录
    uni-app的H5版本下载跨域问题
    基于webrtc的数据传输研究总结
    数据链路层(必备知识)
    MySQL权限
    6个小技巧,帮助职场新人培养项目管理能力
    【笔记】关于寄存器的一些理解
    jsp349的校园网招生录入宣传网SSM
  • 原文地址:https://blog.csdn.net/m0_61469860/article/details/126411351