计数排序

 

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]--;
}
}
}
}
 
 
 
 
 
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]--;
}
}
}
}
posted @ 2024-02-05 20:00  赵千万  阅读(10)  评论(0)    收藏  举报