quickSort - 编程细节
quicksort
快速排序
有几个细节比较重要
今天听到一个清华的大佬的话,他曾经是NOI,
在大一就得到了我梦寐以求的ACM金奖,他这样说,
他们在打NOI的时候,每天要求做10道题,
连续做60天就是600
每10道题就是一个小小的台阶,只有练好了这种元功力,才能更好的在这条道路上走下去
每做10道题就是一个小的提升,我从大一大二这么长时间,才做了300题不到
虽然有人说ACM不是唯一的出路,
但是编程水平还有算法是一个程序员的必修课,
所以不管我能不能得到奖,
我都会认真的去学习编程
之前的学习都太过于肤浅,没有深刻理解程序内涵,所以今后写的代码一定要高质量,博客内容也不能太不好,要认真的去对待,全心投入,毕竟有一件可以全身心投入的事情是多么不容易。
快速排序需要记住的几个点
取等条件
在递归的过程中要严格控制取等条件,因为稍不注意就会导致陷入死循环
- 退出条件 l >= r return;
- i 从 l 开始
- main中调用quickSort(0,n-1):n-1是边界
细节
- 先从右侧开始选择,然后在从左侧开始
- quickSort(l,i-1)(i+1,r)
- if i < j 才进行交换,否则不交换
很容易看懂的代码(代码原理就不说了)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n;
int arr[10000];
void quickSort(int l, int r){
if(l >= r)return ;
int tmp = arr[l];
int i = l;
int j = r;
// cout << i << " " << j << endl;
while(i != j){
while(arr[j] >= tmp && i < j)
j--;
while(arr[i] <= tmp && i < j)
i++;
if(i < j){
int tt = arr[j];
arr[j] = arr[i];
arr[i] = tt;
}
}
arr[l] = arr[j];
arr[j] = tmp;
quickSort(l,j-1);
quickSort(j+1,r);
}
int main(){
memset(arr,0,sizeof arr);
cin >> n;
for(int i = 0 ; i < n ;i++){
cin >> arr[i];
}
quickSort(0,n-1);
for(int i = 0 ; i < n ;i++){
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
quickSort - 编程细节的更多相关文章
- 长文梳理muduo网络库核心代码、剖析优秀编程细节
前言 muduo库是陈硕个人开发的tcp网络编程库,支持Reactor模型,推荐大家阅读陈硕写的<Linux多线程服务端编程:使用muduo C++网络库>.本人前段时间出于个人学习.找工 ...
- SOCKET网络编程细节问题(4)
SOCKET网络编程快速上手(二)——细节问题(4) 5.慢系统调用及EINTR 还记得前面readn和writen函数么?里面有个EINTR,现在就来谈谈这个,这个很重要. Linux世界有个叫信号 ...
- SOCKET网络编程细节问题3
SOCKET网络编程快速上手(二)——细节问题(3) 3.SIGPIPE问题 人怕牺牲,我们写的程序也一样,人有死不瞑目,程序又何尝不是?程序跑着跑着,突然就崩掉了.好一点的牺牲前告诉你些打印,差点的 ...
- SOCKET网络编程细节问题(2)
SOCKET网络编程快速上手(二)——细节问题(2) 2.TCP数据包接收问题 对初学者来说,很多都会认为:客户端与服务器最终的打印数据接收或者发送条数都该是一致的,1000条发送打印,1000条接收 ...
- SOCKET网络编程细节问题1
SOCKET网络编程快速上手(二)——细节问题(1) 三.细节问题一个也不能少 Socket编程说简单也简单,程序很容易就能跑起来,说麻烦还真是麻烦,程序动不动就出问题.记得刚开始写网络代码的时候,那 ...
- JavaScript学习总结-技巧、有用函数、简洁方法、编程细节
整理JavaScript方面的一些技巧.比較有用的函数,常见功能实现方法,仅作參考 变量转换 //edit http://www.lai18.com var myVar = "3.14159 ...
- 【JavaScript】我的JavaScript技术总结第一篇——编程细节
遍历数组 for (var i=0, l=arr.length; i<l; i++) 这样写的一个好处就是让每次循环少一步获取数组对象长度的操作,数组长度越长,价值越明显. 判断变量的真假 if ...
- C++知识点总结(四)——面向对象的编程细节总结
1.空类的默认函数 一般情况下,对于任意一个类A,如果程序员不显示的声明和定义上述函数,C++编译器将会自动的为A产生4个public inline(公有.内联)的默认函数,这4个函数最常见的形式为: ...
- Python核心编程-细节
直接从六张开始看看书里有什么. cmp() len() max() and min() sorted() and reversed() enumerate() and zip() sum() list ...
随机推荐
- Zipline Beginner Tutorial
Zipline Beginner Tutorial Basics Zipline is an open-source algorithmic trading simulator written in ...
- 并发编程 - IO模型 - 1.io模型/2.阻塞io/3.非阻塞io/4.多路复用io
1.io模型提交任务得方式: 同步:提交完任务,等结果,执行下一个任务 异步:提交完,接着执行,异步 + 回调 异步不等结果,提交完任务,任务执行完后,会自动触发回调函数同步不等于阻塞: 阻塞:遇到i ...
- ntopng基础
当你在本地网络监控网络流量,根据流量大小.监控平台/接口.数据库类型等等,可以有许多不同的选择.ntopng是一套开源(遵循GPLv3协议)网络流量分析解决方案,提供基于web界面的实时网络流量监控. ...
- 网络爬虫之scrapy框架详解
twisted介绍 Twisted是用Python实现的基于事件驱动的网络引擎框架,scrapy正是依赖于twisted, 它是基于事件循环的异步非阻塞网络框架,可以实现爬虫的并发. twisted是 ...
- 部署knight项目
发布CRM你将使用以下软件 nginx uWSGI CentOS7 CRM项目文件 virtualenv supervisor WSGI.uWSGI python web服务器开发使用WSGI协议(W ...
- Python脚本连接数据库读取特定字段保存在文件中
从Script表中取出Description字段作为文件名,并按协议将脚本归位相同的文件夹,取TestScript字段的内容写入文件 import MySQLdb import sys import ...
- nodejs跨平台应用
nodejs官网https://nodejs.org/download/release/ 一.发行版 1)ubuntu sudo apt-get install nodejssudo apt-get ...
- Loadrunner中参数化取值方式分析
Loadrunner中参数化取值依赖两个维度: 1.取值顺序分为“顺序”“随机”“唯一”. select next row:Sequential , Random,unique 2.更新值时分为 ...
- R中遇到的部分问题
在Rstdio使用的是3.5.1的64位R版本中遇到问题:The Perl script 'WriteXLS.pl' failed to run successfully. 首先使用 Sys.whic ...
- 百度NLP一面
C++ : 1.拷贝构造函数和重载=符分别在什么情况下被调用,实现有什么区别 2.虚函数的目的,虚函数和模板类的区别,如何找到虚函数 常规算法: 1. 如何输出一个集合的所有真子集,递归和非递 ...