数据结构与算法-排序算法(空间换时间算法)
数据结构与算法-排序算法(空间换时间算法)
1、#####计数排序
package suanfa;
import java.util.Arrays;
public class MySort {
public void countingSort(int[] data){
int max=data[0];
int min=data[0];
for(int value:data){
if(value<min){
min=value;
}
if(value>max){
max=value;
}
}
int[] temp=new int[max-min+1];
for(int value:data){
temp[value-min]++;
}
int index=0;
for(int i=0;i<temp.length;i++){
while(temp[i]>0){
data[index++]=i+min;
temp[i]--;
}
}
}
public static void main(String[] args){
int[] data=new int[]{9,8,7,65,4,3,32,223,1};
MySort mySort=new MySort();
mySort.countingSort(data);
for(int value:data){
System.out.println(value);
}
}
}
2、#####基数排序
package suanfa;
import java.util.Arrays;
public class MySort {
public void radixSort(int[] data){
int[][] bucket=new int[10][data.length];
int max=data[0];
for(int value:data){
if(value>max){
max=value;
}
}
int len=(max+"").length();
for(int i=0;i<len;i++){
int[] index=new int[10];
for(int value:data){
int x=(int)(value/Math.pow(10,i))%10;
bucket[x][index[x]++]=value;
}
int s=0;
for(int k=0;k<10;k++){
for(int j=0;j<index[k];j++){
data[s++]=bucket[k][j];
}
}
}
}
public static void main(String[] args){
int[] data=new int[]{9,8,7,65,4,3,32,223,1};
MySort mySort=new MySort();
mySort.radixSort(data);
for(int value:data){
System.out.println(value);
}
}
}
这个基数排序也可以用于字符串的字典序排序(逐位比较)先比较最低位,最低位数相同的放进桶中,然后再比较十位、百位。。。。。。。
浙公网安备 33010602011771号