递归实现快速排序
主要在于哨兵的选择和分部分进行排序,每次递归将左右两部分分开进行排序,选取子数列的第一个元素作为哨兵,后面按照方法排序即可。

#include<bits/stdc++.h>
using namespace std;
int num[1005];
int partition(int l,int r)
{int i=l,j=r+1;int tar=num[l];while(1){while(num[++i]<tar&&i<r);while(num[--j]>tar);if(i>=j)break;swap(num[i],num[j]);}num[l]=num[j];num[j]=tar;return j;
}
void quicksort(int l,int r)
{if(l>=r)return;int t=partition(l,r);quicksort(l,t-1);quicksort(t+1,r);
}
int main()
{int n;while(scanf("%d",&n)!=EOF){for(int i=0;i<n;i++)//scanf("%d",&num[i]);num[i]=rand();quicksort(0,n-1);for(int i=0;i<n-1;i++)printf("%d ",num[i]);printf("%d\n",num[n-1]);}return 0;
}

随机化实现快速排序
相比于递归实现,随机化实现主要是在哨兵的选择上,递归每次默认选择第一个元素作为哨兵,但随机化是从数列中随机选择一个数,让这个数和第一个元素调换,之后就实现了所谓的随机化。

#include<bits/stdc++.h>
using namespace std;
int num[1005];
int partition(int l,int r)
{int i=l,j=r+1;int tar=num[l];while(1){while(num[++i]<tar&&i<r);while(num[--j]>tar);if(i>=j)break;swap(num[i],num[j]);}num[l]=num[j];num[j]=tar;return j;
}
int randompartition(int l,int r)
{int i=(rand()%(r-l+1))+l;swap(num[i],num[l]);return partition(l,r);
}
void quicksort(int l,int r)
{if(l>=r)return;int t=randompartition(l,r);quicksort(l,t-1);quicksort(t+1,r);
}
int main()
{int n;while(scanf("%d",&n)!=EOF){for(int i=0;i<n;i++)//scanf("%d",&num[i]);num[i]=rand();quicksort(0,n-1);for(int i=0;i<n-1;i++)printf("%d ",num[i]);printf("%d\n",num[n-1]);}return 0;
}

计算机算法设计与分析 递归实现快速排序和随机化实现快速排序相关推荐

  1. 计算机算法设计与分析 递归实现归并排序和非递归实现归并排序

    递归实现归并排序 输入排序的数组的长度,程序用随机数生成对应的数组,之后递归调用排序,排序过程中思想类似于二分,当每个最小分组中只有一个元素时开始返回,直到排完整个数组. #include<bi ...

  2. 计算机算法设计与分析(第4版) 王晓东 著 2012.2 笔记(这本书还不错,偏实用、有难度)

    计算机算法设计与分析(第4版) 目录 1 算法概述 2 递归与分治策略 3 动态规划 4 贪心算法 5 回溯法 6 分支限界法 7 随机化算法 8 线性规划与网络流 算法概述 复杂性分析 NP-完全性 ...

  3. 计算机算法设计与分析教学大纲,《算法设计与分析》教学大纲

    <<算法设计与分析>教学大纲>由会员分享,可在线阅读,更多相关<<算法设计与分析>教学大纲(3页珍藏版)>请在人人文库网上搜索. 1.课程编号:&quo ...

  4. 计算机算法设计与分析第五章思维导图知识点总结 ( 初稿 )

    复习链接 计算机算法设计与分析第一章思维导图 计算机算法设计与分析第二章思维导图&&知识点总结 计算机算法设计与分析第三章思维导图&&知识点总结 计算机算法设计与分析第 ...

  5. 计算机算法设计与分析(第5版)PDF

    <计算机算法设计与分析(第5版)>是2018年电子工业出版社出版的图书,作者是王晓东. 整本书的结构是:先介绍算法设计策略思想,然后从解决经典算法问题来学习,通过实践的方式去学习算法. 网 ...

  6. 算法设计与分析——递归与分治策略——全排列

    算法设计与分析--递归与分治策略--全排列 全排列问题的解决是通过分治与递归思想来解决的 首先判断是否递归到了最后一位,如果递归到了最后一位,则输出他当前的全排列序列. 如果没有到达最后一位,则循环的 ...

  7. 计算机算法设计与分析考试题,《计算机算法设计与分析》习题及答案

    <计算机算法设计与分析>习题及答案 一.选择题 1.二分搜索算法是利用( A )实现的算法. A.分治策略 B.动态规划法 C.贪心法 D.回溯法 2.下列不是动态规划算法基本步骤的是( ...

  8. 国科大计算机算法设计与分析陈玉福,中科院陈玉福计算机算法设计与分析期末简答题答案.pdf...

    中科院陈玉福计算机算法设计与分析期末简答题答案 1. 贪心算法和动态规划算法有什么共同点和区别?它们都有那些优势和劣势? 共通点:动态规划和贪心算法都是一种递推算法 ,均有局部最优解来推导全局最优解 ...

  9. 国科大刘玉贵老师计算机算法设计与分析2021年期末考试题回顾

    总体感受 国科大研究生的计算机算法设计与分析课程有三位老师教授,分别是卜东波老师.陈玉福老师 和刘玉贵老师,这三位老师上课各有特色和风格.我选择的是刘玉贵老师的课程. 这门课程的内容挺充足的,但是有个 ...

最新文章

  1. HDOJ 2049 不容易系列之(4)——考新郎
  2. 使用WildFly 9和Jolokia监视DevOps样式
  3. An HTML5 presentation builder — Read more
  4. 学生管理系统(简易)7/26
  5. hdu 1861 游船出租 tag:模拟
  6. chain.doFilter(request,response)含义
  7. 干粉灭火器(泡沫灭火器)工作原理
  8. kernel 3.2.0 上加入自己的板级文件
  9. CentOS linux系统将UTC时间修改为CST时间
  10. 加班到凌晨三点?一张图看懂华为员工睡眠时间!!
  11. 缓存加速-----Squid-访问控制列表日志分析反向代理
  12. python基础知识整理13-正则re
  13. c++ 统计一个一篇英文小说的单词数,从文件读取小说
  14. matlab无向图 有向图画法
  15. 计算机储存数据怎样操作,计算机如何存储数据
  16. 微信小程序App的使用
  17. 企业架构研究总结(3)——企业架构的发展历程
  18. Windows共享文件夹————Windows互传文件的最方便方式
  19. 工控主板商用主板的区别及对比
  20. Python钉钉提醒

热门文章

  1. fastscript增加三方控件
  2. sql语句中一些特殊字符的处理
  3. Debug Android with Android phone.
  4. cxf wsdl2java wsdl_通过cxf 包的 wsdl2java 生成客户端 测试webservice
  5. intelj idea安装和配置
  6. Mock(模拟后端接口数据)配合Vuex的使用
  7. 数据库设计需要注意什么
  8. Spring Boot Executable jar/war 原理
  9. visjs使用小记-2.option参数注释说明
  10. html中的a标签、img标签、iframe标签、列表标签