数据排序[例] 统计字符数[题目] 给定一个由a~z这26个字符组成的字符串,统计其中哪个符号出现的次数最多。
[输入] 输入包括一行,一个字符串,一个整数,长度不超过1000。
[输出] 输出一行,包括出现次数最多的字符和该字符出现的次数,中间用一个空格分开。如果有多个字符出现的次数相同且最多,那么输出ASCII码最小的那一个字符。
[样例输入]1abbcc
[样例输出]1c 3
[例题参考答案]123456789101112131415161718192021。#include <iostream>#include <cstdio>#include <cstring>using namespace std;int maxn, a[26];string s;char ans;int main() { cin >> s; for(int i = 0; i < s.size(); i++) { a[s[i] - 'a']++; //将s的第 ...
C++七大经典排序算法详解前言:排序是将一组数据,按照指定的顺序或要求来进行排列的过程。是数据结构相关课程和内容较为重要和核心的内容之一,常常作为考试题和面试题目来考察学生和面试者,因此熟练掌握经典的排序算法原理和代码实现是非常重要的本文介绍了几大较为经典的排序算法:插入、希尔、选择、堆、冒泡、快速和归并排序
各种排序算法动图解析请参考
各种排序算法复杂度对比冒泡排序:两两比较,将大的元素不断后移;选择排序:在一次遍历中,选择最小的元素,和从起始位置开始的元素交换;插入排序:选择一个元素,若此元素比前一个元素大,while循环不断左移找到它的位置。希尔排序:在插入排序的基础之上加入了一个gap步长进行排序归并排序:数组分治,将有序的子数组合并快速排序:在数组中选择一个基准找到它的位置,接着从基准的两边采用同样的方法分治。堆排序:先对整个数组构建大顶堆,接着从根节点开始不断调整。
冒泡排序法冒泡排序是所有排序算法中相对简单且容易理解的算法,它的核心思想:通过for循环不断遍历需要排序的元素,依次比较相邻的两个元素,若不满足指定的顺序(可以从大到小排序,也可以反过来),就交换两个元素,直 ...
1.桶排序本页面将简要介绍桶排序。
定义桶排序(英文:Bucket sort)是排序算法的一种,适用于待排序数据值域较大但分布比较均匀的情况。
过程桶排序按下列步骤进行:
设置一个定量的数组当作空桶;
遍历序列,并将元素一个个放到对应的桶中;
对每个不是空的桶进行排序;
从不是空的桶里把元素再放回原来的序列中。
性质稳定性如果使用稳定的内层排序,并且将元素插入桶中时不改变元素间的相对顺序,那么桶排序就是一种稳定的排序算法。
由于每块元素不多,一般使用插入排序。此时桶排序是一种稳定的排序算法。
时间复杂度桶排序的平均时间复杂度为 O(n + n^2/k + k)(将值域平均分成 n块 + 排序 + 重新合并元素),当 k\approx n 时为 O(n)。
桶排序的最坏时间复杂度为 O(n^2)。
实现1234567891011121314151617181920212223242526272829303132const int N = 100010;int n, w, a[N];vector<int> bucket[N];void insertion_sort(vect ...
[引入] 信息获取后通常需要进行处理,处理后的信息其目的便于人们的应用。信息处理方法有多种,通常有数据的排序、查找、插入、删除、归并等操作。
[STD库的排序方法] STD库中存在一个排序函数,叫sort,这个函数在库algorithm(通过代码#include<algorithm>导入)
sort函数的使用方法
1sort(头指针,尾指针);
举例:将a数组的下表为1~n项排序
1sort(a+1,a+n+1);//下表从0开始
[选择排序]<基本思想> 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在待排序的数列的最前面,直到全部待排序的数据元素都排序完。
<代码实现>1234567891011121314151617int a[20005];void psort(int l, int r) { //此函数的意义:排序a数组的l~r的位置的元素 for(int i = l; i < r; i++) { //j=i+1,当i=r时j(i+1)>r ...