博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
quickSort - 编程细节
阅读量:5019 次
发布时间:2019-06-12

本文共 1275 字,大约阅读时间需要 4 分钟。

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 
#include
#include
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;}

转载于:https://www.cnblogs.com/pprp/p/8660147.html

你可能感兴趣的文章
从0开始实现STM32L4XX输出50Hz方波
查看>>
caffe mnist LeNet 参数详细介绍
查看>>
CocoaPods建立私有仓库
查看>>
HIVE中的order by操作
查看>>
Centos下新建用户及修改用户目录
查看>>
iOS开发IPhone以及iPad尺寸汇总
查看>>
Spring Boot RestTemplate文件上传
查看>>
myBatis自动生成mapping,dao和model
查看>>
Android Serivce 高级篇AIDL讲解
查看>>
SpringBoot学习笔记(2):引入Spring Security
查看>>
图片加水印 PDF取缩略图
查看>>
bzoj 4180: 字符串计数
查看>>
安卓--布局设计-计算器
查看>>
Java重写《C经典100题》 --27
查看>>
ABP中的拦截器之EntityHistoryInterceptor
查看>>
【oracle】oracle数据库建立序列、使用序列实现主键自增
查看>>
使用SQLiteDatabase操作SQLite数据库第二种方法
查看>>
vue,一路走来(12)--父与子之间传参
查看>>
css3 选择器的比较(一) -- 以字符串开头
查看>>
实现交换两个变量值的第二种方法
查看>>