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. 剑指Offer——把数组排成最小的数

    题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 分析: 排 ...

  2. 安装canal

    一.安装前准备 配置Mysql: [mysqld] log-bin=mysql-bin #添加这一行就ok binlog-format=ROW #选择row模式 server_id=1 #配置mysq ...

  3. Again Array Queries---Lightoj1100(循环暴力)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1100 题意是给你n个数,q个询问,每次求出 a 到 b(从0开始)最小差值: 直接暴力 ...

  4. 【我的Android进阶之旅】Jenkins挂载slave节点,增强分布式编译的效率

    由于公司的Jenkins任务越来越多,而且所有的Android Jenkins任务都在同一台服务器上进行编译,而且该服务器配置Jenkins任务最多3个任务同时运行,所以有时候大家一起编译的时候,只能 ...

  5. 理解Global interpreter lock

      Global interpreter lock (GIL) is a mechanism used in computer language interpreters to synchronize ...

  6. (4.20)SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧

    转自:指尖流淌 https://www.cnblogs.com/zhijianliutang/p/4085546.html SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧 ...

  7. phpcms调用子栏目名称/文章怎么操作

    phpcms调用子栏目名称相对比较简单一些,也是用{pc:content}来调用,只是把action设置为category,catid如果为0的话是调用所有一级栏目,如果是其他数字的话,则调用相应栏目 ...

  8. 解决scrollView中嵌套编辑框导致不能上下滑动的问题

    EditText设置maxLines之后,文本行数超过maxLines,会网上折叠,上下滑动能够浏览全部文本. 若EditText外层有scrollView.在EditText上下滑动,不会像正常情况 ...

  9. vs2010帮助文件安装完全攻略

    1.VS2010帮助文件不支持重新配置,这个时候打开C:\Program Files\Microsoft Help Viewer\1.0目录,找到“HelpLibManager.exe.config” ...

  10. 机器学习算法(优化)之二:期望最大化(EM)算法

    EM算法概述 (1)数学之美的作者吴军将EM算法称之为上帝的算法,EM算法也是大家公认的机器学习十大经典算法之一.EM是一种专门用于求解参数极大似然估计的迭代算法,具有良好的收敛性和每次迭代都能使似然 ...