quicksort

快速排序

有几个细节比较重要

  1. 今天听到一个清华的大佬的话,他曾经是NOI,
  2. 在大一就得到了我梦寐以求的ACM金奖,他这样说,
  3. 他们在打NOI的时候,每天要求做10道题,
  4. 连续做60天就是600
  5. 10道题就是一个小小的台阶,只有练好了这种元功力,才能更好的在这条道路上走下去
  6. 每做10道题就是一个小的提升,我从大一大二这么长时间,才做了300题不到
  7. 虽然有人说ACM不是唯一的出路,
  8. 但是编程水平还有算法是一个程序员的必修课,
  9. 所以不管我能不能得到奖,
  10. 我都会认真的去学习编程

之前的学习都太过于肤浅,没有深刻理解程序内涵,所以今后写的代码一定要高质量,博客内容也不能太不好,要认真的去对待,全心投入,毕竟有一件可以全身心投入的事情是多么不容易。

快速排序需要记住的几个点

  • 取等条件

    在递归的过程中要严格控制取等条件,因为稍不注意就会导致陷入死循环

    • 退出条件 l >= r return;
    • i 从 l 开始
    • main中调用quickSort(0,n-1):n-1是边界
  • 细节

    • 先从右侧开始选择,然后在从左侧开始
    • quickSort(l,i-1)(i+1,r)
    • if i < j 才进行交换,否则不交换

很容易看懂的代码(代码原理就不说了)

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. using namespace std;
  5. int n;
  6. int arr[10000];
  7. void quickSort(int l, int r){
  8. if(l >= r)return ;
  9. int tmp = arr[l];
  10. int i = l;
  11. int j = r;
  12. // cout << i << " " << j << endl;
  13. while(i != j){
  14. while(arr[j] >= tmp && i < j)
  15. j--;
  16. while(arr[i] <= tmp && i < j)
  17. i++;
  18. if(i < j){
  19. int tt = arr[j];
  20. arr[j] = arr[i];
  21. arr[i] = tt;
  22. }
  23. }
  24. arr[l] = arr[j];
  25. arr[j] = tmp;
  26. quickSort(l,j-1);
  27. quickSort(j+1,r);
  28. }
  29. int main(){
  30. memset(arr,0,sizeof arr);
  31. cin >> n;
  32. for(int i = 0 ; i < n ;i++){
  33. cin >> arr[i];
  34. }
  35. quickSort(0,n-1);
  36. for(int i = 0 ; i < n ;i++){
  37. cout << arr[i] << " ";
  38. }
  39. cout << endl;
  40. return 0;
  41. }

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. Python爬虫实例(二)使用selenium抓取斗鱼直播平台数据

    程序说明:抓取斗鱼直播平台的直播房间号及其观众人数,最后统计出某一时刻的总直播人数和总观众人数. 过程分析: 一.进入斗鱼首页http://www.douyu.com/directory/all 进入 ...

  2. Python用MySQLdb, pymssql 模块通过sshtunnel连接远程数据库

    转载自 https://www.cnblogs.com/luyingfeng/p/6386093.html 安全起见,数据库的访问多半是要做限制的,所以就有一个直接的问题是,往往多数时候,在别的机器上 ...

  3. php 计算gps坐标 距离

    在计算机或GPS上经纬度经常用度.分.秒和度.度.分.分.秒.秒的混合方式进行表示,度.分.秒间的进 制是60进制,度.度.分.分. 秒.秒的进制是100进制,换算时一定要注意.可以近似地认为每个纬度 ...

  4. MyEclipse安装主题(Color Theme)

    前段时间发现同学开发使用IDE界面相当炫酷(Mac版的IntelliJ IDEA),个人也比较喜欢那种风格的界面,想想自己MyEclipse IDE界面简直是屌丝啊~~~~ 今天上CSDN看见一篇介绍 ...

  5. 【HTML5游戏开发】简单的《找不同汉字版》,来考考你的眼力吧

    一,准备工作 本次游戏开发需要用到lufylegend.js开源游戏引擎,版本我用的是1.5.2(现在最新的版本是1.6.0). 引擎下载的位置:http://lufylegend.googlecod ...

  6. php使用amqplib方式使用rabbitmq

    安装 sudo apt-get install php sudo apt-get install rabbitmq-server sudo apt-get install php-bcmath php ...

  7. 转Hibernate 一对多关联的CRUD__@ManyToOne(cascade=(CascadeType.ALL))

    一:Group和Users两个类 假定一个组里有n多用户,但是一个用户只对应一个用户组. 1.所以Group对于Users是“一对多”的关联关系@OneToMany Users对于Group是“多对一 ...

  8. Appium-Java滑动操作

    Java滑动操作,通常可以直接使用API中AndroidDriver类中的swipe方法,直接进行调用 swipe(int startx, int starty, int endx, int endy ...

  9. jQuery实现复选框 全选、反选、全不选

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  10. boost单元测试框架

    头文件: #include <boost/test/unit_test.hpp> 编译加:-lboost_unit_test_framework 单元测试: 需要定义BOOST_TEST_ ...