计算机算法设计与分析 递归实现快速排序和随机化实现快速排序
递归实现快速排序
主要在于哨兵的选择和分部分进行排序,每次递归将左右两部分分开进行排序,选取子数列的第一个元素作为哨兵,后面按照方法排序即可。
#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;
}
计算机算法设计与分析 递归实现快速排序和随机化实现快速排序相关推荐
- 计算机算法设计与分析 递归实现归并排序和非递归实现归并排序
递归实现归并排序 输入排序的数组的长度,程序用随机数生成对应的数组,之后递归调用排序,排序过程中思想类似于二分,当每个最小分组中只有一个元素时开始返回,直到排完整个数组. #include<bi ...
- 计算机算法设计与分析(第4版) 王晓东 著 2012.2 笔记(这本书还不错,偏实用、有难度)
计算机算法设计与分析(第4版) 目录 1 算法概述 2 递归与分治策略 3 动态规划 4 贪心算法 5 回溯法 6 分支限界法 7 随机化算法 8 线性规划与网络流 算法概述 复杂性分析 NP-完全性 ...
- 计算机算法设计与分析教学大纲,《算法设计与分析》教学大纲
<<算法设计与分析>教学大纲>由会员分享,可在线阅读,更多相关<<算法设计与分析>教学大纲(3页珍藏版)>请在人人文库网上搜索. 1.课程编号:&quo ...
- 计算机算法设计与分析第五章思维导图知识点总结 ( 初稿 )
复习链接 计算机算法设计与分析第一章思维导图 计算机算法设计与分析第二章思维导图&&知识点总结 计算机算法设计与分析第三章思维导图&&知识点总结 计算机算法设计与分析第 ...
- 计算机算法设计与分析(第5版)PDF
<计算机算法设计与分析(第5版)>是2018年电子工业出版社出版的图书,作者是王晓东. 整本书的结构是:先介绍算法设计策略思想,然后从解决经典算法问题来学习,通过实践的方式去学习算法. 网 ...
- 算法设计与分析——递归与分治策略——全排列
算法设计与分析--递归与分治策略--全排列 全排列问题的解决是通过分治与递归思想来解决的 首先判断是否递归到了最后一位,如果递归到了最后一位,则输出他当前的全排列序列. 如果没有到达最后一位,则循环的 ...
- 计算机算法设计与分析考试题,《计算机算法设计与分析》习题及答案
<计算机算法设计与分析>习题及答案 一.选择题 1.二分搜索算法是利用( A )实现的算法. A.分治策略 B.动态规划法 C.贪心法 D.回溯法 2.下列不是动态规划算法基本步骤的是( ...
- 国科大计算机算法设计与分析陈玉福,中科院陈玉福计算机算法设计与分析期末简答题答案.pdf...
中科院陈玉福计算机算法设计与分析期末简答题答案 1. 贪心算法和动态规划算法有什么共同点和区别?它们都有那些优势和劣势? 共通点:动态规划和贪心算法都是一种递推算法 ,均有局部最优解来推导全局最优解 ...
- 国科大刘玉贵老师计算机算法设计与分析2021年期末考试题回顾
总体感受 国科大研究生的计算机算法设计与分析课程有三位老师教授,分别是卜东波老师.陈玉福老师 和刘玉贵老师,这三位老师上课各有特色和风格.我选择的是刘玉贵老师的课程. 这门课程的内容挺充足的,但是有个 ...
最新文章
- HDOJ 2049 不容易系列之(4)——考新郎
- 使用WildFly 9和Jolokia监视DevOps样式
- An HTML5 presentation builder — Read more
- 学生管理系统(简易)7/26
- hdu 1861 游船出租 tag:模拟
- chain.doFilter(request,response)含义
- 干粉灭火器(泡沫灭火器)工作原理
- kernel 3.2.0 上加入自己的板级文件
- CentOS linux系统将UTC时间修改为CST时间
- 加班到凌晨三点?一张图看懂华为员工睡眠时间!!
- 缓存加速-----Squid-访问控制列表日志分析反向代理
- python基础知识整理13-正则re
- c++ 统计一个一篇英文小说的单词数,从文件读取小说
- matlab无向图 有向图画法
- 计算机储存数据怎样操作,计算机如何存储数据
- 微信小程序App的使用
- 企业架构研究总结(3)——企业架构的发展历程
- Windows共享文件夹————Windows互传文件的最方便方式
- 工控主板商用主板的区别及对比
- Python钉钉提醒