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 - 编程细节的更多相关文章

  1. 长文梳理muduo网络库核心代码、剖析优秀编程细节

    前言 muduo库是陈硕个人开发的tcp网络编程库,支持Reactor模型,推荐大家阅读陈硕写的<Linux多线程服务端编程:使用muduo C++网络库>.本人前段时间出于个人学习.找工 ...

  2. SOCKET网络编程细节问题(4)

    SOCKET网络编程快速上手(二)——细节问题(4) 5.慢系统调用及EINTR 还记得前面readn和writen函数么?里面有个EINTR,现在就来谈谈这个,这个很重要. Linux世界有个叫信号 ...

  3. SOCKET网络编程细节问题3

    SOCKET网络编程快速上手(二)——细节问题(3) 3.SIGPIPE问题 人怕牺牲,我们写的程序也一样,人有死不瞑目,程序又何尝不是?程序跑着跑着,突然就崩掉了.好一点的牺牲前告诉你些打印,差点的 ...

  4. SOCKET网络编程细节问题(2)

    SOCKET网络编程快速上手(二)——细节问题(2) 2.TCP数据包接收问题 对初学者来说,很多都会认为:客户端与服务器最终的打印数据接收或者发送条数都该是一致的,1000条发送打印,1000条接收 ...

  5. SOCKET网络编程细节问题1

    SOCKET网络编程快速上手(二)——细节问题(1) 三.细节问题一个也不能少 Socket编程说简单也简单,程序很容易就能跑起来,说麻烦还真是麻烦,程序动不动就出问题.记得刚开始写网络代码的时候,那 ...

  6. JavaScript学习总结-技巧、有用函数、简洁方法、编程细节

    整理JavaScript方面的一些技巧.比較有用的函数,常见功能实现方法,仅作參考 变量转换 //edit http://www.lai18.com var myVar = "3.14159 ...

  7. 【JavaScript】我的JavaScript技术总结第一篇——编程细节

    遍历数组 for (var i=0, l=arr.length; i<l; i++) 这样写的一个好处就是让每次循环少一步获取数组对象长度的操作,数组长度越长,价值越明显. 判断变量的真假 if ...

  8. C++知识点总结(四)——面向对象的编程细节总结

    1.空类的默认函数 一般情况下,对于任意一个类A,如果程序员不显示的声明和定义上述函数,C++编译器将会自动的为A产生4个public inline(公有.内联)的默认函数,这4个函数最常见的形式为: ...

  9. Python核心编程-细节

    直接从六张开始看看书里有什么. cmp() len() max() and min() sorted() and reversed() enumerate() and zip() sum() list ...

随机推荐

  1. ubuntu安装wine的方法

    使用命令行安装: 1.打开终端,使用命令:sudo apt-get install wine 2.它可能会出现选择哪个版本的安装,develop是开发版本,stable是稳定版本. 通常我们选择sta ...

  2. Python 类型和对象(转)

    译文:http://wiki.woodpecker.org.cn/moin/PyTypesAndObjects 原文:http://www.cafepy.com/article/python_attr ...

  3. Flask用Flask-SQLAlchemy连接MySQL

    安装 pip3 install Flask-SQLAlchemy 测试环境目录结构 settings.py DIALECT = 'mysql' DRIVER = 'pymysql' USERNAME ...

  4. Newman语法参数

    npm install -g newman npm install -g newman-reporter-html newman run XXX.json -k -r html --reporter- ...

  5. 宏表达式与函数、#undef、条件编译、

    宏表达式在预编译期被处理,编译器不知道宏表达式的存在. 宏表达式没有任何的调用开销 宏表达式中不能出现递归定义. C语言中强大的内置宏 __FILE__:被编译的文件名 //双底线 __LINE__: ...

  6. 安装CentOS 7 文字版

    下载镜像 http://mirrors.163.com/ CentOS 7.4 http://mirrors.163.com/centos/7.4.1708/isos/x86_64/ 选择 CentO ...

  7. TraClus java版实现

           前一阵子我们部门接到了业务那边的一个需求.想通过用户的wifi数据计算出商场内用户最喜爱走的线路.其实说白了就是用户轨迹聚类.根据业务的需求,我们最终采用了traClus聚类算法.tra ...

  8. session和token的区别

    session的使用方式是客户端cookie里存id,服务端session存用户数据,客户端访问服务端的时候,根据id找用户数据 而token一般翻译成令牌,一般是用于验证表明身份的数据或是别的口令数 ...

  9. SpringCloud Config Server中{application}等占位符使用场景设置默认拉去分支

    Spring Cloud Config服务器支持一个Git仓库URL,其中包含{application}和{profile}(以及{label})的占位符. 1.各个占位符所代表的含义 applica ...

  10. 63. Unique Paths II(有障碍的路径 动态规划)

    Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...