美文网首页
排序 二分查找 2019-04-12

排序 二分查找 2019-04-12

作者: 小爆爆就是我 | 来源:发表于2019-04-12 14:17 被阅读0次

排序

  1. 实现归并排序、快速排序、插入排序、冒泡排序、选择排序、堆排序(选做)(完成leetcode上的返回滑动窗口中的最大值(239),这是上一期第三天的任务进行保留(涉及队列可以对第二天进行整理复习))

  2. 编程实现 O(n) 时间复杂度内找到一组数据的第 K 大元素

int selectKthNum(vector<int> &vi, int low, int up, int k)
{
   int p =  up - low +1;
   if(p<6)
   {
    sort(vi.begin()+low, vi.begin()+up+1);
    return vi[k-1];
   }
   int q = p/5; 
   vector<int> medVec;
   int mid = q/2;
   for (int i = 0; i < 5; i++)
   {
      int m = selectKthNum(vi, i*q, (i+1)*q-1,mid+1);
      medVec.push_back(m);
   }
 
   int mNum = selectKthNum(medVec, 0, 
                      medVec.size()-1,   medVec.size()/2+1);

   vector<int> vec1, vec2, vec3;
   for (int i = low; i <= up; i++)
    {
      if(vi[i] > mNum) vec3.push_back(vi[i]);
      if(vi[i] == mNum) vec2.push_back(vi[i]);
      if(vi[i] < mNum) vec1.push_back(vi[i]);
    }
 
   if(vec1.size()>=k) 
      return selectKthNum(vec1, 0, vec1.size()-1, k);
   else if(vec1.size()+vec2.size()>=k) 
      return mNum;
   else if(vec1.size()+vec2.size()<k) 
      return selectKthNum(vec3, 0, vec3.size()-1, 
                                    k-vec1.size()-vec2.size());
}


二分查找

  1. 实现一个有序数组的二分查找算法

  2. 实现模糊二分查找算法(比如大于等于给定值的第一个元素)

对应的 LeetCode 练习题

Sqrt(x) (x 的平方根)

英文版:https://leetcode.com/problems/sqrtx/

中文版:https://leetcode-cn.com/problems/sqrtx/

class Solution {
public:
    int mySqrt(int x) {
        if(x <= 0)
            return 0;
        if(x == 1)
            return 1;
        int i = 1, r = x / 2;
        long mid = 0, t = 0;
        while(i <= r) {
            mid = (i + r) / 2;
            t = mid * mid;
            if(t == x)
                return mid;
            else if(t > x)
                r = mid - 1;
            else
                i = mid + 1;
        }
        return r; 

    }
};

相关文章

  • Swift语言实现几个简单算法

    栈队列二分查找插入排序归并排序快速排序 栈 队列 二分查找 二分查找是用于快速查找到目标数据(已排序)的一种查找方...

  • 排序查找c++

    排序算法 选择排序 顺序查找 二分查找

  • 18-04-27  python3 算法笔记 003查找与排序

    查找: 顺序查找 二分查找 hash查找 排序: 冒泡排序 选择排序 插入排序希尔排序 归并排序 快速...

  • 剑指Offer.C++.code6-10

    (1)排序和查找是面试考察算法的重点,如二分查找、归并排序、快速排序等;(2)查找:顺序查找、二分查找、哈希表查找...

  • 冒泡,选择,插入排序以及二分查找

    冒泡排序 选择排序 优化选择排序 插入排序 排序案例 二分法查找 二分法查找的前提是数组必须是有序的; 二分查找案...

  • 排序算法

    准备工作 一、快速排序 二、归并排序 三、堆排序 四、 二分查找 /*二分查找*/ 五、 冒泡排序 /*OC 冒...

  • Java实现常见的算法

    主要罗列了常见的选择排序,冒泡排序和快速排序,还有二分查找的算法。 选择排序 冒泡排序 快速排序 二分查找 注意二...

  • javascript 算法

    快速排序 冒泡排序 二分查找

  • php算法

    冒泡排序 快速排序 二分查找

  • 基本算法

    冒泡算法 选择排序 插入排序 顺序查找 二分查找

网友评论

      本文标题:排序 二分查找 2019-04-12

      本文链接:https://www.haomeiwen.com/subject/rudcwqtx.html