算法导论示例-CountingSort

原创 2006年06月06日 01:01:00
public class CountingSort {
    /**
     * 计数排序.
     * @param array 待排序数组
     * @param k 数组元素范围为0-k
     * @return 已排序数组
     */
    public static int[] sort(int[] array, int k) {
        int[] counts = new int[k+1];
        // 统计元素出现的次数
        for (int i = 0; i < array.length; i++) {
            counts[array[i]]++;
        }
        // 合计,每个元素是前面所有元素的和
        for (int i = 1; i < counts.length; i++) {
            counts[i] += counts[i - 1];
        }
        int[] result = new int[array.length];
        // 复制,array[i]在目标数组中的位置是counts[array[i]
        for (int i = array.length - 1; i >= 0; i--) {
            result[counts[array[i]]-1] = array[i];
            counts[array[i]]--;
        }
        return result;
    }    
}

import junit.framework.TestCase;

public class CountingSortTest extends TestCase {
    public void testFixArray() {
        int[] array = { 0, 2, 4, 3, 1, 3 };
        array = CountingSort.sort(array, 4);
        assertTrue(verifyOrdered(array));
    }

    public void testRandomArray() {
        int size = (int)(Math.random()* 1000);
        int[] array = new int[size];
        for(int i = 0; i < size; i++) {
            array[i] =  (int)(Math.random()* 100);
        }
        
        array = CountingSort.sort(array, 100);
        assertTrue(verifyOrdered(array));
    }
    
    private boolean verifyOrdered(int[] array) {
        for (int i = 1; i < array.length; i++) {
            if (array[i - 1] > array[i]) {
                return false;
            }
        }
        return true;
    }
}

CountingSort

/* for i←1 to k do C[i] ←0 for j←1ton do C[A[j]] ←C[A[j]] + 1 ⊳C[i] = |{key = i}| fo...
  • PYPARA
  • PYPARA
  • 2017年02月13日 16:21
  • 94

countingsort

/** * */ /** * PROJECT NAME: ArtOfAlgorithm * PACKAGE NAME: yrz.kindOfSort * FILE NAME: Co...
  • YRZHLL
  • YRZHLL
  • 2013年03月07日 15:20
  • 258

计数排序countingsort

#include void counting_sort(int *a,int *b,int k,int length){     int c[k];     int i;     for(i...
  • elpsyc
  • elpsyc
  • 2016年04月17日 21:00
  • 49

计数排序_COUNTINGSORT

计数排序_COUNTINGSORT我们之前讲过四种基本的排序方法:《快速排序_QUICKSORT》:http://blog.csdn.net/ii1245712564/article/details/...
  • ii1245712564
  • ii1245712564
  • 2015年05月16日 15:16
  • 676

计数排序(CountingSort)

一. 背景知识与目的 1、进行计数排序练习。 2、计数排序说明: 计数排序只适用于整数的排序。 3、实现原理: 1)假设整数带排序数组A[1..N]从0…K中的任意整数的数组。建立计数数组C...
  • losteronly
  • losteronly
  • 2016年04月03日 02:24
  • 117

计数排序——CountingSort

计数排序计数排序是线性排序的一种。能够在线性时间内完成给定序列的排序,但计数排序应用的场景就更加具体了。基本思想:对每一个输入的元素x,确定小于x的元素个数。这样就可以直接把x放到它在输出数组中的位置...
  • sinat_31508159
  • sinat_31508159
  • 2016年02月03日 22:15
  • 144

算法导论26(最大流)

26.1流网络 26.2Ford-Fulkerson方法
  • hz5034
  • hz5034
  • 2014年11月07日 15:00
  • 780

算法导论29(线性规划)

29.1 标准型和松弛型标准型: maximize:∑j=1ncjxjsubjectto:∑j=1naijxj≤bi,i=1,2,⋯,mxj≥0,j=1,2,⋯,n\begin{array}{l} ...
  • hz5034
  • hz5034
  • 2015年06月30日 15:29
  • 1092

算法导论示例-InsertSort

/** * Introduction to Algorithms, Second Edition * 2.1 InsertSort * @author 土豆爸爸 * */public class ...
  • s3n
  • s3n
  • 2006年06月02日 22:00
  • 720

麻省理工《算法导论》视频下载

     《算法导论》是太经典和权威的算法方面的专著, 一直都是在看《算法导论》的英文版本的教材(introduction to algorithm),看起来确实很吃力,进度比较慢。今天在网上无意中发...
  • shaohui
  • shaohui
  • 2007年01月10日 19:22
  • 28718
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法导论示例-CountingSort
举报原因:
原因补充:

(最多只允许输入30个字)