计数排序and基数排序
1 计数排序,稳定 复杂度o(k + n)
public static int[] countingSort(int[] nums) {
int n = nums.length;
int k = ;
for (int i = ; i < n; i++) {
k = Math.max(k, nums[i]);
}
int[] count = new int[k + ];
int[] res = new int[n];
for (int i = ; i < n; i++) {
count[nums[i]]++;
}
for (int i = ; i <= k; i++) {
count[i] += count[i - ];
}
for (int i = n - ; i >= ; i--) {
res[--count[nums[i]]] = nums[i];
}
return res;
}
2 基数排序 需要稳定排序 有n个d位数,每一位有k个取值,复杂度为d(n + k)
public static int[] radixSort(int[] nums) {
int max = ;
int n = nums.length;
for (int i = ; i < nums.length; i++) {
max = Math.max(max, nums[i]);
}
int exp = ;
int[] cur = new int[n];
while (max / exp > ) {
int[] count = new int[];
for (int i = ; i < n; i++) {
count[(nums[i] / exp) % ]++;
}
for (int i = ; i < ; i++) {
count[i] += count[i - ];
}
for (int i = n - ; i >= ; i--) {
cur[--count[(nums[i] / exp) % ]] = nums[i];
}
for (int i = ; i < n; i++) {
nums[i] = cur[i];
}
exp *= ;
}
return nums;
}
3 桶排序

计数排序and基数排序的更多相关文章
- 排序算法的C语言实现(下 线性时间排序:计数排序与基数排序)
计数排序 计数排序是一种高效的线性排序. 它通过计算一个集合中元素出现的次数来确定集合如何排序.不同于插入排序.快速排序等基于元素比较的排序,计数排序是不需要进行元素比较的,而且它的运行效率要比效率为 ...
- 第2章 排序 | 第10节 计数排序练习题 && 基数排序
对于一个int数组,请编写一个计数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 计数排序 ...
- 【程序员笔试面试必会——排序②】Python实现 计数排序、基数排序
一.计数排序 概要: 时间复杂度O(n),空间复杂度O(k),k是输入序列的值的范围(最大值-最小值),是稳定的.计数排序一般用于已知输入值的范围相对较小,比如给公司员工的身高体重信息排序. 思路: ...
- JavaScript 数据结构与算法之美 - 桶排序、计数排序、基数排序
1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...
- 归并排序 & 计数排序 & 基数排序 & 冒泡排序 & 选择排序 ----> 内部排序性能比较
2.3 归并排序 接口定义: int merge(void* data, int esize, int lpos, int dpos, int rpos, int (*compare)(const v ...
- 排序基础之非比较的计数排序、桶排序、基数排序(Java实现)
转载请注明原文地址: http://www.cnblogs.com/ygj0930/p/6639353.html 比较和非比较排序 快速排序.归并排序.堆排序.冒泡排序等比较排序,每个数都必须和其他 ...
- 计数排序和桶排序(Java实现)
目录 比较和非比较的区别 计数排序 计数排序适用数据范围 过程分析 桶排序 网络流传桶排序算法勘误 桶排序适用数据范围 过程分析 比较和非比较的区别 常见的快速排序.归并排序.堆排序.冒泡排序等属于比 ...
- 桶排序和计数排序的理解实现和比较(Java)
比较和非比较的区别 常见的快速排序.归并排序.堆排序.冒泡排序等属于比较排序.在排序的最终结果里,元素之间的次序依赖于它们之间的比较.每个数都必须和其他数进行比较,才能确定自己的位置.比较排序的优势是 ...
- Python线性时间排序——桶排序、基数排序与计数排序
1. 桶排序 1.1 范围为1-M的桶排序 如果有一个数组A,包含N个整数,值从1到M,我们可以得到一种非常快速的排序,桶排序(bucket sort).留置一个数组S,里面含有M个桶,初始化为0.然 ...
随机推荐
- sentinel 核心概念
编者注:前段时间笔者在团队内部分享了sentinel原理设计与实现,主要讲解了sentinel基础概念和工作原理,工作原理部分大家听了基本都了解了,但是对于sentinel的几个概念及其之间的关系还有 ...
- 用composer安装php代码(以安装phpmailer为例)
1.安装composer.exe软件 2.下载composer.phar 3.创建composer.json文件 { "require": { "php": & ...
- 04 Javascript的运算符
js中的运算符跟python中的运算符有点类似,但也有不同.所谓运算,在数学上,是一种行为,通过已知量的可能的组合,获得新的量. 1.赋值运算符 以var x = 12,y=5来演示示例| 2.算数运 ...
- tensorflow学习笔记-bili莫烦
bilibili莫烦tensorflow视频教程学习笔记 1.初次使用Tensorflow实现一元线性回归 # 屏蔽警告 import os os.environ[' import numpy as ...
- 微信小程序商城 带java后台源码
微信小程序商城(Java版) 演示地址 账号:admin 密码:admin 小程序体验码: 技术选型 1 后端使用技术 1.1 springframework4.3.7.RELEASE 1.2 myb ...
- npm设置淘宝代理
npm config set registry https://registry.npm.taobao.org npm info underscore
- 手把手docker部署java应用(初级篇)
本篇原创发布于 Flex 的个人博客:点击跳转 前言 在没有 docker 前,项目转测试是比较麻烦的一件事.首先会化较长的时间搭建测试环境,然后在测试过程中又经常出现测试说是 bug,开发说无法 ...
- 吐槽:那些Java设计中不得不说的槽点
1. 求长度各有千秋 你是否曾经在面试的时候,经常被问到:数组有没有 length() 方法?字符串有没有 length() 方法? 集合有没有 length() 方法? 面对这个问题,那么不得不吐槽 ...
- iOS 国际化 (国际化文字内容不改变,app名字国际化,一键切换语言)
首先我们要分三个步骤讲解怎么一步步实现app名字国际化.内容国际化.一键切换国际化的: 一.app设置内容或者可以说是app名字或者可以说Info.Plist中的东西国际化 app名字国际化 1. ...
- 基于modelform和ajax的注册
forms文件 创建ModelForm组件 from django import forms from crm import models from django.core.exceptions im ...