计数排序

1.只适合正整数
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int a[] = {2, 5, 3, 1, 3, 2, 7, 0, 8, 5};
countNumber(a);
System.out.println(Arrays.toString(a));
}
public static void countNumber(int[] a) {
int N = Integer.MIN_VALUE;
for (int i = 0; i < a.length; i++) {
if (a[i] > N) {
N = a[i];
}
}
int[] b = new int[N + 1];
for (int i = 0; i < a.length; i++) {
b[a[i]]++;
}
int j = 0;
for (int i = 0; i < N + 1; i++) {
while (b[i] > 0) {
a[j] = i;
j++;
b[i]--;
}
}
}
}
public class Main {
public static void main(String[] args) {
int a[] = {2, 5, 3, 1, 3, 2, 7, 0, 8, 5};
countNumber(a);
System.out.println(Arrays.toString(a));
}
public static void countNumber(int[] a) {
int N = Integer.MIN_VALUE;
for (int i = 0; i < a.length; i++) {
if (a[i] > N) {
N = a[i];
}
}
int[] b = new int[N + 1];
for (int i = 0; i < a.length; i++) {
b[a[i]]++;
}
int j = 0;
for (int i = 0; i < N + 1; i++) {
while (b[i] > 0) {
a[j] = i;
j++;
b[i]--;
}
}
}
}
2.适合正整数也适合负整数,或者都可
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int a[] = {2, 5, 3, 1, 3, 2, 7, 0, 8, 5, -2, -1};
countNumber(a);
System.out.println(Arrays.toString(a));
}
public static void countNumber(int[] a) {
int N = Integer.MIN_VALUE;
int M = Integer.MAX_VALUE;
for (int i = 0; i < a.length; i++) {
if (a[i] > N) {
N = a[i];//最大值
}
if (a[i] < M) {
M = a[i];//最小值
}
}
int[] b = new int[N - M + 1];
for (int i = 0; i < a.length; i++) {
b[a[i] - M]++;
}
int j = 0;
for (int i = 0; i < N + 1; i++) {
while (b[i] > 0) {
a[j] = i + M;//实际值为
j++;
b[i]--;
}
}
}
}
public class Main {
public static void main(String[] args) {
int a[] = {2, 5, 3, 1, 3, 2, 7, 0, 8, 5, -2, -1};
countNumber(a);
System.out.println(Arrays.toString(a));
}
public static void countNumber(int[] a) {
int N = Integer.MIN_VALUE;
int M = Integer.MAX_VALUE;
for (int i = 0; i < a.length; i++) {
if (a[i] > N) {
N = a[i];//最大值
}
if (a[i] < M) {
M = a[i];//最小值
}
}
int[] b = new int[N - M + 1];
for (int i = 0; i < a.length; i++) {
b[a[i] - M]++;
}
int j = 0;
for (int i = 0; i < N + 1; i++) {
while (b[i] > 0) {
a[j] = i + M;//实际值为
j++;
b[i]--;
}
}
}
}
本文来自博客园,作者:赵千万,转载请注明原文链接:https://www.cnblogs.com/zhaoqianwan/p/17872148.html
千万千万赵千万
浙公网安备 33010602011771号