package com.sort;
/**
* for i <- 1 to k
* do C[i] = 0
* for j <- 1 to n
* do C[A[j]] <- C[A[j]] + 1
* for i <- 2 to k
* do C[i] <- C[i] + C[i-1]
* for j <-n downto 1
* do B[C[A[j]]] <- A[j]
* C[A[j]] <- C[A[j]] - 1
*
*/
public class CountingSort {
public static void main(String[] args) {
int[] a = {6, 10, 13, 5, 8, 3, 2, 11, 1};
int[] b = countingSort(a, 13 + 1);
display(b);
}
// k 为数组a的最带值
static int[] countingSort(int[] a, int k) {
int[] c = new int[k];
int[] b = new int[a.length];
int i;
int j;
for (i=0; i<k; i++) {
c[i] = 0;
}
for (j=0; j<a.length; j++) {
c[a[j]] = c[a[j]] + 1;
}
for (i = 1; i<k; i++) {
c[i] = c[i] + c[i-1];
}
for (j=a.length-1; j>=0; j--) {
b[c[a[j]]-1] = a[j];
c[a[j]] = c[a[j]] - 1;
}
return b;
}
static void display(int[] a) {
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
}
java 线性排序 counting sort
最新推荐文章于 2019-05-19 15:43:00 发布