对于一个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. shell script执行的几种方式

    编写一个shell脚本test.sh,内容如下 a='测试执行方式' echo $a 方式1 使用路径的方式执行 chmod a+x test.sh ./test.sh 执行结果如下 当脚本执行之后, ...

  2. map赋值前要先初始化:assignment to entry in nil map

    注意这种map的嵌套的形式,make只初始化了map[string]T部分(T为map[int]int),所以下面的赋值会出现错误: test := make(map[string]map[int]i ...

  3. [ 转载 ] Java基础4--Java中的static关键字解析

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

  4. python opencv3 矩形 圆形边框

    git:https://github.com/linyi0604/Computer-Vision # coding:utf8 import cv2 import numpy as np # 读入图像 ...

  5. 常用SQL脚本记录一

    20.SUM()和 列+ 统计结果时:如果列里有一行为null,SUM函数会忽略它:如果+,则结果集也为NULL了 19 SUBSTRING (expression,startIndex, endIn ...

  6. Struts2 (下)

    接收参数 当发送一个请求时,除了使用RequestApi来接收参数之外,Struts2内部提供了3种接收参数的方式 接收参数的方式 1. 提供属性set方法的方式 在Action当中提供对应属性的se ...

  7. VMWare虚拟机下CentOS 配置网络实现远程连接,提供Web访问

        最近使用VMWARE虚拟机当中redhat操作系统,感觉直接使用很不方便,于是就决定配置下redhat网络,通过本机远程工具SecureCRT来连接redhat使用.     环境说明:本机操 ...

  8. Express中间件

    一.编写中间件 中间件函数能够访问请求对象(req),响应对象(res),应用程序的请求/响应循环中的下一个中间件函数.下一个中间件函数通常由名为next的变量来表示. 中间件函数可以执行以下任务: ...

  9. zoj 3629 Treasure Hunt IV 打表找规律

    H - Treasure Hunt IV Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu ...

  10. C#中常见的系统内置委托用法详解(抄录)

    C#中常见的系统内置委托 Action类.Func类.Predicate<T>.Comparison<T>委托 Action类的委托 Action委托 封装一个方法,该方法不具 ...