对于一个int数组,请编写一个计数排序算法,对数组元素排序。

给定一个int数组A及数组的大小n,请返回排序后的数组。

测试样例:
[1,2,3,5,2,3],6
[1,2,2,3,3,5]
  • 计数排序

class CountingSort {
public:
int* countingSort(int* A, int n) {
// write code here
int min=A[],max=A[];
for(int i=;i<n;i++)
{
if(A[i]<min) min=A[i];
if(A[i]>max) max=A[i];
}
int k=max-min+;
int* B=new int[k](); //初始化为0
for(int i=;i<n;i++)
B[A[i]-min]++;
int idx=;
for(int i=min;i<=max;i++)
for(int j=;j<B[i-min];j++)
A[idx++]=i;
delete []B;
return A;
}
};

对于一个int数组,请编写一个基数排序算法,对数组元素排序。

给定一个int数组A及数组的大小n,请返回排序后的数组。保证元素均小于等于2000。

测试样例:
[1,2,3,5,2,3],6
[1,2,2,3,3,5]
  • 基数排序

#include <iostream>
using namespace std;
const int MAX = ; void print(int *a, int sz) {
for (int i = ; i < sz; i++)
cout << a[i] << " ";
cout << endl;
} void RadixSortLSD(int *a, int arraySize)
{
int i, bucket[MAX], maxVal = , digitPosition = ;
for (i = ; i < arraySize; i++) {
if (a[i] > maxVal) maxVal = a[i];
} int pass = ; // used to show the progress
/* maxVal: this variable decide the while-loop count
if maxVal is 3 digits, then we loop through 3 times */
while (maxVal / digitPosition > ) {
/* reset counter */
int digitCount[] = { }; //对每一位:统计0-10对于数字的个数 /* count pos-th digits (keys) */
for (i = ; i < arraySize; i++)
digitCount[a[i] / digitPosition % ]++; /* accumulated count */
for (i = ; i < ; i++)
digitCount[i] += digitCount[i - ]; /* To keep the order, start from back side */
for (i = arraySize - ; i >= ; i--)
{
int temp = a[i] / digitPosition % ;
bucket[--digitCount[temp]] = a[i];
} /* rearrange the original array using elements in the bucket */
for (i = ; i < arraySize; i++)
a[i] = bucket[i]; /* at this point, a array is sorted by digitPosition-th digit */
cout << "pass #" << pass++ << ": ";
print(a, arraySize); /* move up the digit position */
digitPosition *= ;
}
}

第2章 排序 | 第10节 计数排序练习题 && 基数排序的更多相关文章

  1. Netty源码分析第5章(ByteBuf)---->第10节: SocketChannel读取数据过程

    Netty源码分析第五章: ByteBuf 第十节: SocketChannel读取数据过程 我们第三章分析过客户端接入的流程, 这一小节带大家剖析客户端发送数据, Server读取数据的流程: 首先 ...

  2. 【程序员笔试面试必会——排序②】Python实现 计数排序、基数排序

    一.计数排序 概要: 时间复杂度O(n),空间复杂度O(k),k是输入序列的值的范围(最大值-最小值),是稳定的.计数排序一般用于已知输入值的范围相对较小,比如给公司员工的身高体重信息排序. 思路: ...

  3. 排序算法六:计数排序(Counting sort)

    前面介绍的几种排序算法,都是基于不同位置的元素比较,算法平均时间复杂度理论最好值是θ(nlgn). 今天介绍一种新的排序算法,计数排序(Counting sort),计数排序是一个非基于比较的线性时间 ...

  4. 数据结构与算法-排序(八)计数排序(Counting Sort)

    摘要 计数排序本质就是统计不同元素出现的次数,然后将元素依次从小到大放置,每个元素看统计的次数,就紧挨着放置几个同样的元素. 看似简单的处理,在算法中,会依据统计的元素次数推算出每个元素的索引位置,这 ...

  5. 算法-java代码实现计数排序

    计数排序   第10节 计数排序练习题 对于一个int数组,请编写一个计数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3], ...

  6. JavaScript 数据结构与算法之美 - 桶排序、计数排序、基数排序

    1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...

  7. 归并排序 & 计数排序 & 基数排序 & 冒泡排序 & 选择排序 ----> 内部排序性能比较

    2.3 归并排序 接口定义: int merge(void* data, int esize, int lpos, int dpos, int rpos, int (*compare)(const v ...

  8. 排序基础之非比较的计数排序、桶排序、基数排序(Java实现)

    转载请注明原文地址: http://www.cnblogs.com/ygj0930/p/6639353.html  比较和非比较排序 快速排序.归并排序.堆排序.冒泡排序等比较排序,每个数都必须和其他 ...

  9. 基于非比較的排序:计数排序(countSort),桶排序(bucketSort),基数排序(radixSort)

    计数排序 条件:要排序的数组的元素必须是在一定范围的,比方是1~100.在排序之前我们必须知道数组元素的范围. 思路:顾名思义:就是用一个数组来计数的. 步骤: 1.用一个数组来计数count[ ], ...

随机推荐

  1. 2017-2018-1 20179202《Linux内核原理与分析》第十一周作业

    Metasploit实现木马生成.捆绑.免杀 1.预备知识 (1)Metasploit Metasploit是一款开源的安全漏洞检测工具,全称叫做The Metasploit Framework,简称 ...

  2. 《Playing hard exploration games by watching YouTube》论文解读

    论文链接 油管链接 一.摘要   当环境奖励特别稀疏的时候,强化学习方法通常很难训练(traditionally struggle).一个有效的方式是通过人类示范者(human demonstrato ...

  3. ARKit:增强现实技术在美团到餐业务的实践

    前言 增强现实(Augmented Reality)是一种在视觉上呈现虚拟物体与现实场景结合的技术.Apple 公司在 2017 年 6 月正式推出了 ARKit,iOS 开发者可以在这个平台上使用简 ...

  4. 【AI in 美团】深度学习在文本领域的应用

    背景 近几年以深度学习技术为核心的人工智能得到广泛的关注,无论是学术界还是工业界,它们都把深度学习作为研究应用的焦点.而深度学习技术突飞猛进的发展离不开海量数据的积累.计算能力的提升和算法模型的改进. ...

  5. Python下读取转换unicode的json格式

    转自: https://blog.csdn.net/felcon/article/details/38524317 JSON(JavaScript Object Notation) 是一种轻量级的数据 ...

  6. [BZOJ4372]烁烁的游戏(动态点分治+线段树)

    和[BZOJ3730]震波几乎一样,每个点建两棵线段树分别代表它的管辖范围内以它为LCA的路径的贡献和它对父亲的贡献. 注意点分树上的点的距离在原树上不单调,所以不能有若距离超出限制就break之类的 ...

  7. [Arc081F]Flip and Rectangles

    [Arc081F]Flip and Rectangles 试题分析 首先考虑如何操作,发现我们只会选若干行和若干列来进行一次取反. 这个东西相当于什么呢?相当于交点不变,然后这些行和这些列的其它点取反 ...

  8. 【BZOJ】4767: 两双手【组合数学】【容斥】【DP】

    4767: 两双手 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1057  Solved: 318[Submit][Status][Discuss] ...

  9. bzoj 5055: 膜法师 -- 树状数组

    5055: 膜法师 Time Limit: 10 Sec  Memory Limit: 128 MB Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇 ...

  10. poj 3630 Phone List 贪心

    Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 23722   Accepted: 7289 Descr ...