算法刷题(一)

本文介绍了C++中的算法刷题,包括快速排序算法、使用memset进行赋值,深入探讨了指针数组和数组指针的区别,讲解了指针常量与常量指针的概念,以及在vector容器中如何实现去重、查找和求和功能。此外,还涉及了set自定义数据类型、重载运算符的应用,位运算的技巧,字符串字符遍历和随机值的生成。
摘要由CSDN通过智能技术生成

快排

void quick(vector<int>& nums, int l, int r) {
   
	if (l >= r) return ;
	int i = l, j = r;
	int temp = nums[l];
    // 如果不取=, 当碰到相同大小的数时, i,j都不会变, 无限循环
    // 解决办法: 1. 使用>= <=  2. 使用>, <, 但是每次赋值后人为i++, j--
    // 214472596 i j 都为4, temp为3, 如果没有时刻判断j>i有bug, 因此需要时刻判断j和i的关系, 并不只是最外层总体判断一次
	while(j > i) {
   
		while(j > i && nums[j] > temp) j--;
		if (j > i) {
   
			nums[i] = nums[j];
			i++;
		}
		while(j > i && nums[j] > temp) i++;
		if (j > i) {
   
			nums[j] = nums[i];
			j++;
		}
	}
	/*
	while(j > i) {
		while(j > i && nums[j] >= temp) j--;
		nums[i] = nums[j];
		while(j > i && nums[i] <= temp) i++;
		nums[j] = num[i];
	}
	*/
	nums[i] = tmep;
	quick(nums. l, i-1);
	quick(nums. i+1, r);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值