java 基数排序(稳定排序)

来源:互联网 发布:网络弊大于利反方提问 编辑:程序博客网 时间:2024/05/16 15:39
package 快速排序_归并排序_二分查找_等排序;/* 基数排序(桶子法)//稳定排序 * 1.首先找到最大的数的位数 * 2.根据最大位数把所有数字的高位补0,然后所有数字的长度相等 * 3.根据最低位个位 0-9开始排序,得到新序列l * 4.再根据新序列l对十位开始排序,直到排序到最高位为止 * 5.感觉类似于hash算法了 *  * 数组中的最大数字的位数是多少,需要进行多少次整理 *  */public class JishuSort {public static void main(String args[]){int[] arr = {100,11,54,21,12,3,5,9,89,87,49,540,315};//int a = findMaxSize(arr);Sort(arr);for(int i=0;i<arr.length;i++){System.out.println(arr[i]);}}public static int findMaxSize(int[] arr){//求数组中最大数的长度int temp = arr[0];for(int i=1;i<arr.length;i++){if(temp<arr[i]){temp=arr[i];}}int len = String.valueOf(temp).length();//最大数的长度int cou=0;//最大数的长度while(temp>0){cou++;temp=temp/10;}return cou;}public static void Sort(int[] arr){int maxSize= findMaxSize(arr);int[][] ara = new int[10][arr.length];//表示每一位上为0-9的数字,相同的放在一起int[] rar = new int[10];//数组rar[i]用来表示某位是i的元素的个数int d=0;//总整理次数int k=0;//arr数组的下标int n=1;//while(d<maxSize){for(int i=0;i<arr.length;i++){//从个位开始进行排序 放到相应的二维数组中int yu = (arr[i]/n)%10;//求每个数每一位上的数字ara[yu][rar[yu]] = arr[i];rar[yu]++;}for(int i=0;i<10;i++){//把每趟整理的数值按整理后的顺序放到原数组中, 进行下次循环排序if(rar[i] != 0){for(int j=0; j<rar[i] ; j++){arr[k]=ara[i][j];k++;}rar[i]=0;//把相应位上的个数置空,下次使用}}k=0;n=n*10;d++;}}}

0 0
原创粉丝点击