`

基数排序

阅读更多
/**
 * 基数排序
 * <ul>
 * <li>平均情况:O(d(r+n))</li>
 * <li>最好情况:O(d(rd+n))</li>
 * <li>最坏情况:O(d(r+n))</li>
 * <li>辅助存储:O(d(rd+n))</li>
 * <li>稳定</li>
 * <ul>
 * 
 * @timestamp Mar 13, 2016 8:59:32 PM
 * @author smallbug
 */
public class RadixSort {
	public static void main(String[] args) {
		int[] data = DataUtil.getData(100000);
		// System.out.println(Arrays.toString(data));
		long time = System.currentTimeMillis();
		data = radixSort(data);
		// System.out.println(Arrays.toString(data));
		System.out.println("speed " + (System.currentTimeMillis() - time) + " ms");
		System.out.println("排序是否成功:" + (DataUtil.verify(data, DataUtil.ASC) ? "是" : "否"));
	}

	private static int[] radixSort(int[] data) {
		int length = String.valueOf(data.length).toCharArray().length;
		for (int i = 1; i < length; i++) {
			int carve = (int) Math.pow(10, i);// 从个位开始比,然后十位,百位。。。
			data = bucketSort(data, carve);
		}
		return data;
	}

	private static int[] bucketSort(int[] data, int carve) {
		int[] count = new int[10];// 计数数组
		int[] result = new int[data.length];// 结果数组
		for (int i = 0; i < data.length; i++) {
			count[(data[i] % carve) / (carve / 10)]++;// 建立计数表
		}
		for (int i = 1; i < count.length; i++) {
			count[i] = count[i] + count[i - 1];// 格式化计数表
		}
		for (int i = data.length - 1; i >= 0; i--) {
			result[--count[(data[i] % carve) / (carve / 10)]] = data[i];// 根据计数表排序
		}
		return result;
	}
}

 

0
3
分享到:
评论

相关推荐

    基数排序基数排序基数排序

    基数排序是一种非比较型整数排序算法,它的原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。这种排序方法不需要进行记录关键字间的比较,而是通过“分配”和“收集”操作对单逻辑关键字进行排序。 1....

    基数排序及流程图

    包括了基数排序的实现代码和流程图。 先对个位数字进行统计,然后根据个位进行排序,然后对十位进行统计,然后根据十位进行排序,即可获得最终结果。 时间效率:待排序列为n个记录,10个关键码,关键码的取值范围为0...

    数据结构基数排序数据结构基数排序

    数据结构中的基数排序是一种非比较型整数排序算法,它基于数字的位宽进行排序,尤其适用于处理大量相同数字的情况。基数排序的核心思想是将数字按照位数从低位到高位分别进行桶排序,最终得到完全有序的序列。下面将...

    基数排序、堆排序、希尔排序、直接插入排序

    这里我们将深入探讨四种常见的排序算法:基数排序、堆排序、希尔排序和直接插入排序。 首先,基数排序是一种非比较型整数排序算法,它的基本思想是将整数按位数切割成不同的数字,然后按每个位数分别比较。基数排序...

    数据结构之基数排序数据结构之基数排序数据结构之基数排序

    数据结构之基数排序数据结构之基数排序数据结构之基数排序数据结构之基数排序数据结构之基数排序

    C++写基数排序算法

    基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。在C++中实现基数排序,主要涉及到数组、计数排序以及位操作等技术。以下是关于基数排序及其C++实现的详细解释...

    基于双向链表的基数排序

    基数排序(radix sort)又称桶排序(bucket sort),相对于常见的比较排序,基数排序是一种分配式排序,需要将关键字拆分成数字位。并且按照数字位的值对数据项进行排序,这种方法不需要进行比较操作。 为了尽可能少的...

    基数排序链表法

    基数排序法用链表完成使用C语言适用于刚入门的学者

    基数排序-radix sort

    基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。这种排序方法对于大数据量的处理非常有效,尤其适合于数据范围远大于内存大小的情况。以下是基数排序的详细...

    基数排序过程及程序基数排序过程及程序

    基数排序过程及程序基数排序过程及程序基数排序过程及程序基数排序过程及程序

    基数排序C语言实现

    基数排序是一种非比较型整数排序算法,它的原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。这种排序方法非常适合处理大量整数的排序,尤其在数字位数相同或者相差不大的情况下,效率较高。本文将深入...

    C经典算法之基数排序法

    这边所要介绍的「基数排序法」(radix sort)则是属于「分配式排序」(distribution sort),基数排序法又称「桶子法」(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些「桶...

    基数排序算法 java实现

    基数排序是一种非比较型整数排序算法,它的原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。这种算法对于大数据量的排序尤其有效,因为其时间复杂度为线性,即O(n*k),其中n是待排序的元素数量,k是每...

    基数排序_C语言_源码_数据结构

    基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。这种算法对于大数据量的排序非常有效,尤其是在数据范围不超过0-9的情况下。接下来,我们将深入探讨基数排序...

    基数排序课程设计.rar

    基数排序是一种非比较型整数排序算法,它的原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。这个课程设计主要涵盖了基数排序的基本概念、实现方式以及C++编程技术。在本课程设计中,你将学习到如何用...

    用stl实现基数排序算法

    基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。它不是基于比较的排序,而是通过创建额外的数据结构,比如计数器或者桶,来达到排序的目的。在处理大量数据时...

    简单的基数排序算法,STL实现

    基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。这种算法对于大数据量的排序尤其有效,因为它是线性时间复杂度的,即O(nk),其中n是元素数量,k是数字的最大...

    利用递归算法实现的基数排序算法

    基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。递归算法则是一种解决问题的方法,它解决问题的每一个子问题都是原问题的缩小版,直到子问题简单到可以直接...

    常用排序PK 冒泡 快排 选择排序 基数排序 等

    本文将详细解析几种常见的排序算法:冒泡排序、快速排序、选择排序以及基数排序,并探讨它们的工作原理、效率和适用场景。 **冒泡排序**: 冒泡排序是一种简单直观的排序算法,通过比较相邻元素并交换位置来实现...

    归并排序,基数排序算法比较

    归并排序和基数排序是两种不同的排序算法,它们在实现方式和效率特点上存在显著差异。 **归并排序**是一种基于分治策略的排序算法。它的基本思想是将待排序的序列分成两个长度相等(或近似相等)的部分,分别对这两...

Global site tag (gtag.js) - Google Analytics