• 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;
    }
    
  • 相关阅读:
    第十七周OJ-重复字符串
    第十七周项目6-学生成绩统计(一)
    第十七周项目5-玩日期时间
    python面试题(三)列表操作
    python面试题(二)字符串常用函数
    python面试题(-)可变数据类型与不可变数据类型
    Cisco packet tracer6.0下的网络工程实训
    Cisco packet tracer下dhcp的配置的vlan的应用
    python的自定义函数
    git学习二
  • 原文地址:https://www.cnblogs.com/pprp/p/8660147.html
Copyright © 2020-2023  润新知