2.排序和查找

【教程4>第6章>第15节】 基于I+jQ复数信号的LS信道估计和均衡实现1——matlab仿真分析,QPSK为例 在基于QPSK调制的通信系统中,LS信道估计和均衡是用于补偿信道失真、提高信号传输质量的重要技术。以下将详细介绍基于I+jQ复数信号的 LS 信道估计和均衡的实现原理与过程。可以看到,通过线性插值之后,QPSK信号的星座图可以模糊的看到四个星座点(图2),通过非线性插值之后,可以清晰的看到QPSK的四个星座点(图3)。可以看到,信道均衡显著提高了通信系统的可靠性和有效性。 阅读详情

排序

内定义数据排序

对输入的n个数进行排序

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

int arr[100];

int main() {
	int n;
	while (scanf("%d", &n) != EOF) {
		for (int i = 0; i < n; i++) {
			scanf("%d", &arr[i]);
		}
		//左闭右开,默认升序
		sort(arr, arr + n);
		//输出
		for (int i = 0; i < n; i++) {
			printf("%d ", arr[i]);
		}
		printf("\n");
	}

}

自定义数据排序

  • 设计比较函数
  • 定义大小关系

成绩排序

  • 使用比较函数
#include <iostream>
#include<algorithm>
using namespace std;

struct Student {
	int number;
	int score;
};

Student arr[100];

bool Compare(Student x, Student y) {
	//按照学生的成绩从小到大进行排序
	//如果学生的成绩相同,则按照学号的大小进行从小到大排序。
	if (x.score == y.score) {
		return x.number < y.number;
	} else {
		return x.score < y.score;
	}
}

int main() {
	int n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d%d", &arr[i].number, &arr[i].score);
	}
	sort(arr,arr+n,Compare);
	for (int i = 0; i < n; i++) {
		printf("%d %d\n", arr[i].number, arr[i].score);
	}


	return 0;

}
  • 重新定义大小关系
#include <iostream>
#include<algorithm>
using namespace std;

struct Student {
	int number;
	int score;
    //重载运算符
	bool operator<(Student student) const {
		if (score == student.score) {
			return number < student.number;
		} else {
			return score < student.score;
		}
	}
};

Student arr[100];

int main() {
	int n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d%d", &arr[i].number, &arr[i].score);
	}
	sort(arr, arr + n);
	for (int i = 0; i < n; i++) {
		printf("%d %d\n", arr[i].number, arr[i].score);
	}


	return 0;

}

整数奇偶排序

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

int arr[10];

bool Compare(int x, int y) {
	if (x % 2 == 1 && y % 2 == 1) {
		return x > y; //两个数都为奇数从大到小排列
	} else if (x % 2 == 0 && y % 2 == 0) {
		return x < y; //两个数都为偶数从小到大排列
	} else if (x % 2 == 1 && y % 2 == 0) {
		return true;// 两个数奇偶性不同,奇数在前,偶数在后
	} else {
		return false;
	}

}
int main() {

	while (scanf("%d", &arr[0]) != EOF) {
		for (int i = 1; i < 10; i++) {
			scanf("%d", &arr[i]);
		}
		sort(arr, arr + 10, Compare);
		for (int i = 0; i < 10; i++) {
			printf("%d ", arr[i]);
		}
		printf("\n");
	}

	return 0;

}

线性排序–计数排序

5324332771
待排序数0123456789
出现的次数0123110200

sort(HDU 1425)

#include <iostream>
#include<algorithm>
#include<cstring>
using namespace std;

const 	int MAXN = 1e6 + 10;
const   int RANGE = 5e5;
//待排序数,处于区间[-500000,500000]的整数
int arr[MAXN];
//记录待排序数 出现的次数,下标为待排序数,值为出现的次数
int number[MAXN];

int main() {
	int n, m;
	while (scanf("%d%d", &n, &m) != EOF) {
		//每轮将辅助数组number清空 
		//给定地址后的连续的内存,逐个字节初始化为参数中指出的值,故第三个参数为总的字节数
		memset(number,0,sizeof(number)) ;
		for (int i = 0; i < n; i++) {
			scanf("%d", &arr[i]);
			//用元素值作为number数组的下标,值为元素出现的次数,数组下标不能为负数,进行平移 
			number[arr[i]+RANGE]++;
		}
		//将number里面的值还原到arr ,最终结果即为排好序的元素 (从小到大) 
		int index=0;
		for(int i=0;i<MAXN;i++)
		{
			 while(number[i]--){
			 	arr[index++]=i-RANGE; 
			 }
		}
		//输出其中前m大的数,从后往前输出 
		for(int i=n-1;i>=n-m;i--){
			if(i==n-m)
			{
				printf("%d\n",arr[i]) ;
			}
			else{
				printf("%d ",arr[i]);
			}
		} 
	}

	return 0;

}

逆序数对–归并排序

逆序数对

1 2 5 6 7 3 4 7 8 9

i j

#include <iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int arr[100];
int temp[100];
int number;//逆序对
void Combine(int left, int middle, int right) {
	int i = left;
	int j = middle + 1;
	int k = left;
	while (i <= middle && j <= right) {
		if (arr[i] <= arr[j]) {
			temp[k++] = arr[i++];
		} else {
			//当 arr[i] > arr[j],i后面的元素(包括i)的个数为逆序数个数 
			number+=middle-i+1;
			temp[k++] = arr[j++];
		}
	}
	//j扫描到头,i还没有
	while (i <= middle) {
		temp[k++] = arr[i++];
	}
	//i扫描到头,j还没有
	while (j <= right) {
		temp[k++] = arr[j++];
	}
	//将temp数据还原到arr
	for (k = left; k <= right; k++) {
		arr[k] = temp[k];
	}
	return;
}

void MergeSort(int left, int right) {
	if (left < right) {
//		int middle=(left+right)/2;//如果数据比较大,left+right和会超出int上界溢出
		int middle = left + (right - left) / 2;
		MergeSort(left, middle);
		MergeSort(middle + 1, right);
		Combine(left, middle, right);

	}
	return;
}

int main() {

	int n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &arr[i]);
	}
	MergeSort(0, n - 1);
	for (int i = 0; i < n; i++) {
		printf("%d ", arr[i]);
	}
	printf("\n");
	printf("%d\n",number);
	return 0;

}

Brainman(POJ 1804)

#include<iostream>
#include<stdio.h>
using namespace std;
const int MAXN = 1010;
int arr[MAXN];
int temp[MAXN];
int number; //逆序对
void Combine(int left, int middle, int right) {
	int i = left;
	int j = middle + 1;
	int k = left;
	while (i <= middle && j <= right) {
		if (arr[i] <= arr[j]) {
			temp[k++] = arr[i++];
		} else {
			//当 arr[i] > arr[j],i后面的元素(包括i)的个数为逆序数个数
			number += middle - i + 1;
			temp[k++] = arr[j++];
		}
	}
	//j扫描到头,i还没有
	while (i <= middle) {
		temp[k++] = arr[i++];
	}
	//i扫描到头,j还没有
	while (j <= right) {
		temp[k++] = arr[j++];
	}
	//将temp数据还原到arr
	for (k = left; k <= right; k++) {
		arr[k] = temp[k];
	}
	return;
}

void MergeSort(int left, int right) {
	if (left < right) {
		//		int middle=(left+right)/2;//如果数据比较大,left+right和会超出int上界溢出
		int middle = left + (right - left) / 2;
		MergeSort(left, middle);
		MergeSort(middle + 1, right);
		Combine(left, middle, right);
	}
	return;
}

int main() {
	int caseNumber;
	scanf("%d", &caseNumber);
	for (int current = 1; current <= caseNumber; current++) {
		int n;
		scanf("%d", &n);
		for (int i = 0; i < n; i++) {
			scanf("%d", &arr[i]);
		}
		number=0;
		MergeSort(0, n - 1);
		printf("Scenario #%d:\n",current); 
		printf("%d\n\n", number);
	}

	return 0;
}

第K大数—快速排序

快速排序

#include<iostream>
#include<stdio.h>
using namespace std;

int arr[100];

int Partition(int left, int right) {
	//随机选取一个数作为枢纽,并和第一个元素位置互换
	int random = left + rand() % (right - left);
	swap(arr[left], arr[random]); //此时枢纽在left位置
	while (left < right) {
		while (left < right && arr[left] <= arr[right]) {
			right--;
		}
		swap(arr[left], arr[right]);//此时枢纽在right位置
		while (left < right && arr[left] <= arr[right]) {
			left++;
		}
		swap(arr[left], arr[right]);//此时枢纽在right位置

	}
	//最后返回枢纽最终的位置 
	return left;

}
void QuickSort(int left, int right) {
	if (left < right) {
		int position = Partition(left, right);
		QuickSort(left,position-1);
		QuickSort(position+1,right); 

	}
}

int main() {

	int n;
	scanf("%d", &n);
	for(int i=0;i<n;i++){
		scanf("%d",&arr[i]);
	}
	QuickSort(0,n-1);
	for(int i=0;i<n;i++){
		printf("%d ",arr[i]);
	}
	printf("\n");

	return 0;
}

第k大数

#include<iostream>
#include<stdio.h>
using namespace std;

int arr[100];

int Partition(int left, int right) {
	//随机选取一个数作为枢纽,并和第一个元素位置互换
	int random = left + rand() % (right - left);
	swap(arr[left], arr[random]); //此时枢纽在left位置
	while (left < right) {
		while (left < right && arr[left] <= arr[right]) {
			right--;
		}
		swap(arr[left], arr[right]);//此时枢纽在right位置
		while (left < right && arr[left] <= arr[right]) {
			left++;
		}
		swap(arr[left], arr[right]);//此时枢纽在right位置

	}
	//最后返回枢纽最终的位置
	return left;

}
int QuickSort(int left, int right, int k) {

	int position = Partition(left, right);
	if (position == k - 1) {
		return arr[position];
	} else if (position < k - 1) {
		return QuickSort(position + 1, right, k);
	} else {
		return QuickSort(left, position - 1, k);
	}


}

int main() {
	int n;
	while (scanf("%d", &n)) {
		for (int i = 0; i < n; i++) {
			scanf("%d", &arr[i]);
		}
		int k;
		scanf("%d", &k);
		printf("%d\n", QuickSort(0, n - 1, k));
	}
	return 0;

}

查找

线性查找 O(n)

查找

#include<iostream>
#include<stdio.h>
using namespace std;

int arr[100];

bool LinearSearch(int n, int target) {
	bool flag = false;
	for (int i = 0; i < n; i++) {
		if (arr[i] == target) {
			flag = true;
			break;
		}
	}
	return flag;
}

int main() {
	int n;//元素个数
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &arr[i]);
	}
	int m;//查找次数
	scanf("%d", &m);
	for (int i = 0; i < m; i++) {
		int target;
		scanf("%d", &target);
		if (LinearSearch(n, target)) {
			printf("YES\n");

		} else {
			printf("NO\n");
		}
	}
	return 0;

}

二分查找 O(logn)

自定义

#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;

int arr[100];

bool BinarySearch(int n, int target) {
	int left = 0;
	int right = n - 1;
	while(left<=right){
		int middle=left+(right-left)/2;
		if(arr[middle]<target)
		{
			left=middle+1;
		}
		else if(arr[middle]>target){
			right=middle-1;
		}
		else{
			return true;
		}
	}
	return false;
}
int main() {
	int n;//元素个数
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &arr[i]);
	}
	sort(arr,arr+n);
	int m;//查找次数
	scanf("%d", &m);
	for (int i = 0; i < m; i++) {
		int target;
		scanf("%d", &target);
		if (BinarySearch(n, target)) {
			printf("YES\n");

		} else {
			printf("NO\n");
		}
	}
	return 0;

}

系统自带

  • lower_bound: 返回大于或等于目标值的第一个位置
  • upper_bound: 返回大于目标值的第一个位置
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;

int arr[100];


int main() {
	int n;//元素个数
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &arr[i]);
	}
	sort(arr,arr+n);
	int m;//查找次数
	scanf("%d", &m);
	for (int i = 0; i < m; i++) {
		int target;
		scanf("%d", &target);
		int position=lower_bound(arr,arr+n,target)-arr;
		if (position!=n&&arr[position]==target) {
			printf("YES\n");

		} else {
			printf("NO\n");
		}
	}
	return 0;

}

散列查找 O(1)

自定义

#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;

int arr[100];
bool hashTable[10000000] ;

int main() {
	int n;//元素个数
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &arr[i]);
		hashTable[arr[i]] = true;
	}
	int m;//查找次数
	scanf("%d", &m);
	for (int i = 0; i < m; i++) {
		int target;
		scanf("%d", &target);
		if (hashTable[target]) {
			printf("YES\n");

		} else {
			printf("NO\n");
		}
	}
	return 0;

}

系统自带:unordered_map

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<unordered_map>
using namespace std;

int arr[100];
unordered_map<int ,bool> hashTable;

int main() {
	int n;//元素个数
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &arr[i]);
		hashTable[arr[i]] = true;
	}
	int m;//查找次数
	scanf("%d", &m);
	for (int i = 0; i < m; i++) {
		int target;
		scanf("%d", &target);
		if (hashTable[target]) {
			printf("YES\n");

		} else {
			printf("NO\n");
		}
	}
	return 0;

}
ROCm rocr-libhsakmt分析系列9-3: queue的内核创建流程 KFD队列是用户空间与GPU通信的核心机制,通过多种队列类型(计算、DMA、调试等)实现命令流管理。核心数据结构包括描述队列属性的queue_properties、内核调度对象queue、进程级管理器process_queue_manager,以及跨进程设备的qcm_process_device等。这些结构通过ring buffer、doorbell机制和MQD硬件描述符协同工作,支持队列全生命周期管理、资源调度、异常处理和上下文保存/恢复功能。 阅读详情

相关推荐

第 3 天:Actor 是什么?创建你的第一个游戏对象!

本文详细介绍 Actor 在 Unreal Engine 5 中的作用,并通过 C++ 创建你的第一个游戏对象。你将学习 Actor 的生命周期(BeginPlay、Tick)、如何添加组件(Static Mesh),并让 Actor 在游戏世界中运作。同时提供 常见问题解决方案,助你快速上手 UE5 C++ 开发!🎮 跟随本教程,构建属于你的第一个游戏对象!

m0_37643873的博客 2630

重要的网址链接

1、linux相关 1)linux系统相关 redhat:https://www.redhat.com/zh/topics/linux/what-is-the-linux-kernel linux公社:https://www.linuxidc.com/Linux/2014-04/99583.htm 2)、嵌入式学习提升 https://www.100ask.net/index 3)yocot使用 https://www.yoctoproject.org/ **bitbake:**https://www.yo

Eric Long的博客 3271

基于STM32F103C8T6的红外循迹避障小车

编程思路:控制核心板IO口的电平(即电机驱动模块的AIN1,AIN2,BIN1,BIN2)从而控制AO1、AO2、BO1、BO2的电平高低,进而控制电机使其正转、反转、不转。由于单纯地拉高拉低电平只能让电机在转与不转的状态切换,故决定利用TIM4的两个通道分别产生两路PWM信号来控制电机速度,四个电机两个一组,同一侧的两个连接在同一个PWM上。(#include "dianji.h"文件中同时写了对循迹模块引脚的初始化)

weixin_48743503的博客 1万+

排序和查找2

在Golang中,我们常用的查找有两种: 1)顺序查找 2)二分查找 顺序查找: 1)有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王 猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称 案例演示:func main() {   //思路   //1.定义一个字符串数组   //2.从控制台接收一个名称,依次比较,发现有就提示相应信息   names :=...

aiyan8271的博客 125

GROMACS新手必看:从PDB文件到完整分子动力学模拟的保姆级教程

本文提供GROMACS分子动力学模拟的保姆级教程,从PDB文件处理到完整模拟流程全覆盖。详细讲解结构预处理、系统构建、能量最小化、生产模拟等关键步骤,并分享性能优化和结果分析技巧,帮助新手快速掌握分子动力学模拟的核心操作。

yhn456789的博客 763

STM32N6实战:FSBL引导XIP运行ThreadX与NetX Duo

在嵌入式系统开发中,程序的存储与执行方式直接影响启动速度和系统实时性。传统MCU常将代码拷贝到内存运行,而高主频处理器则可通过XIP(片外Flash原地执行)技术直接从外部存储取指,省去拷贝过程。但XIP的前提是外部存储器控制器需在上电后第一时间完成初始化,这正是FSBL(第一级引导程序)的核心职责。FSBL负责配置时钟与外部Flash,并将控制权移交给应用。而要让设备具备实时调度与网络能力,可搭配ThreadX实时内核和NetX Duo双协议栈,两者在CubeMX中原生集成,形成一套高性能MCU+外部存储

weixin_29191669的博客 319

复试03-查找和排序2

排序完了后我们就开始做查找这一部分了, 查找的常用方法为: 线性查找O(n) 二分查找O(logn) -----必须是有序序列 散列查找O(1)-----利用散列表(哈希表) 例题3.5 import java.util.Arrays; import java.util.Scanner; public class c7 { public static void main(String[] args) { Scanner scanner = new Scanner(Syste

旅行美蛙的博客 120

LLVM实战:如何用Clang+LLVM打造你的第一个C++编译器(附完整配置步骤)

本文详细介绍了如何使用Clang+LLVM构建C++编译器的完整配置步骤,从环境准备到编译流程剖析,再到调试与优化技巧。通过实战指南,帮助开发者深入理解LLVM编译器框架的工作原理,并掌握交叉编译与性能分析等高级功能。

sprite的博客 748

查找和排序-2.二分查找

二分查找 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 算法要求 1.必须采用顺序存储结构。 2.必须按关键字大小有序排列。 查找过程 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表...

weixin_30340775的博客 149

爬虫法律风险与合规边界

爬虫技术的法律边界正在快速收紧。从2017年上海晟品案开启爬虫入刑先河,到2025年Cloudflare区块链溯源技术将违规行为与企业主体永久绑定,合规已从"可选项"变为"必选项"。技术团队需要建立三层防御体系法律合规层:法律适用判定、授权管理、合同审查、隐私政策;技术控制层:访问控制、数据加密、匿名化、审计日志、监控告警;组织管理层:DPO任命、培训体系、应急响应、合规审计、绩效考核。

从事移动开发八年,csdn博客专家,阿里云特邀专家,华为云云享专家,高级网络信息安全工程师,大数据工程师(高级),python技术开发(高级),HarmonyOS 应用开发者高级认证,现在某学校任教。 1161

数据挖掘实战-基于情感分析+网络语义分析对泾阳茯茶用户评论进行文本分析

本实验数据集来源于京东商城,使用Python爬虫获取泾阳茯茶商品的用户评论,共计3416条数据,字段有用户ID、用户昵称、IP属地、评论时间、评分、评论内容,共计6个字段信息。'''作者:艾派森csdn主页:https://blog.csdn.net/m0_64336780时间:2024/5/28'''# 导包import csv# 获取评论q=0.01',q=0.9,en;b_avif=1;b_dw=1412;b_dh=650;areaId=27;

m0_64336780的博客 1万+

C语言 数组的查找和排序方法 1.顺序查找 2.二分查找; 1.(简单)选择排序法 2.冒泡排序法 3.(直接)插入排序法

C语言 数组部分知识、实现数组查找和排序

undefinedUser_1的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【剑指offer】2.4.2 查找和排序

面试题11:旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 解答:和二分查找一样,我们用两个指针分别指向数组的第一个元素和最后一个元素。接着找到数组中间的元素。如果该中间元素大于或者等于第一个指针指向的元...

PinkBananA_的博客 300

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

第六章 数组、排序和查找——排序(2)

1.排序是将多个数据,依指定的顺序进行排列的过程。2.排序的分类(1)内部排序指将需要处理的所有数据都加载到内存存储器中进行排序。包括:交换式排序法、选择式排序法和插入式排序法。(2)外部排序法数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括:合并排序法和直接合并排序法。

qq_57709301的博客 475

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java 数组、排序和查找(2)

数组反转、数组排序和冒泡法复习

周小末天天开心的博客 733

3.5.2、查找和排序算法-查找算法

考的少,近五年只考过1-2分的折半查找。

yoyo勰的博客 1228

剑指2.4.2 查找和排序

查找 顺序查找,二分查找,哈希表查找,二叉树查找 后面都会遇到 如果面试题要求在排序的数组(或部分排序)中查找一个数字活着统计某个数字出现的次数,尝试使用二分查找 排序 后面再总结(我是真的懒死了) 题目11 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,...

qq_39029148的博客 105

(十二)查找和排序 -- 2. 排序

2. 排序 排序(sorting) 是把一个表 (通常表示为数组) 按某一次序重新排列。 2.1 对一个整数数组排序 考虑对一个整数数组排序的问题。 假设有一列以任意次序排列的整数数据,需要定义一个名为SortIntegerArray的函数,使数组的元素按从小到大的顺序排列。 由于函数SortIntegerArray要尽可能满足通用性,需要在函数中定义两个参数,即数组名和有效长度。 其原型为: static void SortIntegerArray(int array[], int n); 2.2

FionaDong的博客 178

Java中4种常用的排序算法和2种常用的查找算法

四种常用排序算法 ##注:从小到大排 ##冒泡排序##特点:效率低,实现简单思想:每一趟将待排序序列中最大元素移到最后,剩下的为新的待排序序列,重复上述步骤直到排完所有元素。这只是冒泡排序的一种,当然也可以从后往前排。 public void bubbleSort(int array[]) { int t = 0; for (int i = 0; i < array.leng...

苏北讲道理给你听 439

Python算法学习day2:查找和排序(一)

1. 查找 (1) 列表查找 def linear_search(data, value): for i in range(len(data)): if data[i] == value: return i return 0 此算法时间复杂度为O(n) (2) 二分查找 def bin_search(data, value): low = 0 high= len(data) -...

普通Gopher 353

数据结构之树(2)——二叉查找树和二叉排序树

二叉查找树 二叉树包含许多特殊的形式,每一种形式都有自己的作用,但是其最主要的应用还在于进行查找操作和维持相对顺序这两个方面。 二叉查找树的定义(Binary Search Tree): 该树是一颗二叉树。 如果左子树不为空,则左子树上所有节点的值均小于根节点的值。 如果右子树不为空,则右子树上所有节点的值均大于根节点的值。 左、右子树也都是二叉查找树。 二叉查找树就是为了快速查找某个元素。 例如要查找值为1的结点,步骤如下: 第一步:毕竟1与根节点的值,结果1小于6,向右查找,找到6的

二木成林 1万+

careercup-排序和查找 11.2

11.2 编写一个方法,对字符串数组进行排序,将所有变位词1排在相邻的位置。 类似leetcode:Anagrams 解法: 变位词:由变换某个词或短语的字母顺序构成的新的词或短语。例如,“triangle”是“integral”的变位词。 此题有个要求,对数组中的字符串进行分组,将变位词排在一起。注意,除此之外,并没有要求这些词按特定顺序排列。 做法之一就是套用一种标准排序算法,比如归...

weixin_30701521的博客 108

函数_611_排序和查找_2排序_冒泡法排序

C语言教学班共有学生n人(教学班人数不超过500人),在单元测试中每个同学全力发挥考出了 不错的成绩,现在老师想要对成绩按从低到高的次序依次进行排序,并将排序结果输出。 具体操作如下: 1.先输入班级总人数n; 2.再输入班级n个同学的全部成绩; 3.用冒泡法对成绩进行排序; 4.输出排序后的结果 input: 在第一行输入班级人数n; 在第二行输入n个成绩(学生成绩均为正整数)。 output: 输出排序后的n个成绩。 example: input: 6 80 70 95 75 62 90 outp

abcong12的博客 346

第二章 排序和查找(2.查找)

查找

m0_58779012的博客 117

201503-2 数字排序(java 的查找和排序)

问题描述   给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。 输入格式   输入的第一行包含一个整数n,表示给定数字的个数。   第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。 输出格式   输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出...

abc15766228491的博客 274

【golang学习笔记2.1】 golang中的数组中的排序和查找

冒泡规则会进行俩次循环;arr.length-1次循环;第一次【外部循环】每次循环都会出现一个最大数;第二次循环【内部循环】会将比自己大的数进行交换位置。排序是将一组数据,按照指定的规则顺序的排列数据的过程。......

weixin_44779466的博客 1300
上一篇: 1.暴力破解
下一篇: 3. 字符串
ROJS
博客等级 码龄9年 65粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ROJS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值