经典面试排序题(快排堆排)

经典快排

#include <iostream>
#include <vector>
using namespace std;

void quick_sort(vector<int> &vec, int l, int r) {
	if (l < r) {
		int i = l, j = r, x = vec[i];
		while (i < j) {
			while (i < j && vec[j] >= x) j--;
			if (i < j) vec[i++] = vec[j];
			while (i < j && vec[i] < x) i++;
			if (i < j) vec[j--] = vec[i];
		}
		vec[i] = x;
		quick_sort(vec, l, i - 1);
		quick_sort(vec, i + 1, r);
	}
}

void output(vector<int> &vec) {
	int n = vec.size();
	if (n == 0) return;
	for (int i = 0; i < n - 1; i++)
		cout << vec[i] << " ";
	cout << vec[n - 1] << endl;
}

int main()
{
   vector<int> vec1 = {2, 0, 1, 7, 5, 3, 4, 7, 8};
   quick_sort(vec1, 0, vec1.size() - 1);
   output(vec1);
   return 0;
}

经典堆排

#include <iostream>
#include <vector>
using namespace std;

void adjust(vector<int> &vec, int len, int fa) {
	int idx = fa, ma = vec[fa];
	int l = fa * 2 + 1, r = fa * 2 + 2;
	if (l < len && vec[l] > ma) {
		ma = vec[l];
		idx = l;
	}
	if (r < len && vec[r] > ma) {
		ma = vec[r];
		idx = r;
	}
	if (idx != fa) {
		swap(vec[fa], vec[idx]);
		adjust(vec, len, idx);
	}
}

void heap_sort(vector<int> &vec) {
	int n = vec.size();
	// 构建最大堆
	for (int i = n / 2 - 1; i >= 0; i--) {
		adjust(vec, n, i);
	}
	// 调整最大堆
	for (int i = n - 1; i >= 1; i--) {
		swap(vec[0], vec[i]);
		adjust(vec, i, 0);
	}
}

void output(vector<int> &vec) {
	int n = vec.size();
	if (n == 0) return;
	for (int i = 0; i < n - 1; i++)
		cout << vec[i] << " ";
	cout << vec[n - 1] << endl;
}

int main()
{
   vector<int> vec2 = {2, 0, 1, 7, 5, 3, 4, 7, 8};
   heap_sort(vec2);
   output(vec2);
   return 0;
}

leetcode hot100 第K大

也是常有的御用面试经典算法题。

215. 数组中的第K个最大元素

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1:

输入: [3,2,1,5,6,4], k = 2
输出: 5

示例 2:

输入: [3,2,3,1,2,4,5,5,6], k = 4
输出: 4

提示:

  • 1 <= k <= nums.length <= 105
  • -104 <= nums[i] <= 104

class Solution {
public:
    void KMax(vector<int>& nums, int l, int r, int k, int &res, bool &find) {
        if (find) return;
        int n = nums.size();
        int i = l, j = r, x = nums[i];
        if (l < r) {
            while(i < j) {
                while (i < j && nums[j] >= x) j--;
                if (i < j) nums[i++] = nums[j];
                while (i < j && nums[i] < x) i++;
                if (i < j) nums[j--] = nums[i];
            }
            nums[i] = x;
        }
        if (i == n - k) {
            find = true;
            res = x;
        } else if (i < n - k) KMax(nums, i + 1, r, k, res, find);
        else KMax(nums, l, i - 1, k, res, find);
    }
    int findKthLargest(vector<int>& nums, int k) {
        bool find = false;
        int res = 0;
        KMax(nums, 0, nums.size() - 1, k, res, find);
        return res;
    }
};

相关推荐

  1. 经典面试排序

    2024-04-10 04:30:02       34 阅读
  2. 常见排序算法,,希尔,归并,

    2024-04-10 04:30:02       23 阅读
  3. 排序思想-

    2024-04-10 04:30:02       28 阅读
  4. 排序算法】之

    2024-04-10 04:30:02       61 阅读
  5. 排序 - (quick sort)

    2024-04-10 04:30:02       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-10 04:30:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-10 04:30:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-10 04:30:02       82 阅读
  4. Python语言-面向对象

    2024-04-10 04:30:02       91 阅读

热门阅读

  1. SVN(Subversion)代码版本管理

    2024-04-10 04:30:02       34 阅读
  2. linux查看用户登录情况

    2024-04-10 04:30:02       30 阅读
  3. python | ttkbootstrap,一个神奇的 Python 库!

    2024-04-10 04:30:02       34 阅读
  4. Macbook M1版安装安卓模拟器

    2024-04-10 04:30:02       34 阅读
  5. PDF格式解析:Contents stream绘制指令解析

    2024-04-10 04:30:02       37 阅读
  6. 达梦数据库如何开启数据库审计

    2024-04-10 04:30:02       24 阅读
  7. Day6:学习尚上优选项目

    2024-04-10 04:30:02       29 阅读
  8. Nginx服务搭建案例

    2024-04-10 04:30:02       25 阅读
  9. [lesson12]经典问题解析一

    2024-04-10 04:30:02       32 阅读
  10. 计算机网络---第二天

    2024-04-10 04:30:02       26 阅读
  11. C语言题目:阶乘数列求和(函数)

    2024-04-10 04:30:02       31 阅读
  12. Element-plus使用中遇到的问题

    2024-04-10 04:30:02       34 阅读
  13. UVA1595 Symmetry 对称轴 解题报告

    2024-04-10 04:30:02       33 阅读