0
点赞
收藏
分享

微信扫一扫

Algrothm_Sort_BaseNumber



稳定性:[稳定](不稳定的算法结构:如果有两个相同的元素5,会导致第一个5和第二个5的位置发生改变)


idea:与其他7中排序算法不同,他不需要比较关键字的大小


根据比较关键字中各位的值,通过对排序的N个元素进行若干趟“分配”和“收集”来实现排序的


*/



package seven_happy;






import java.util.ArrayList;



import java.util.List;






public class Code_Demo {


/**


* author: Ain


* model: write a code about selection_sort


* date:2016-3-9


*/


定义变量值


private static final int [] a = { 0, 3, 1, 8, 7, 2, 5, 4, 6, 9 };


private static final String OUTPUT_ago = "基数排序之前的顺序";


private static final String OUTPUT_AFTER = "基数排序之后的顺序";




主程序入口


public static void main(String[] args) {


System.out.print(OUTPUT_ago);


for (int i = 0; i < a.length; i++) {


System.out.print(a[i] + " ");


}


// 调用基数排序方法


sort(a);


System.out.println();


System.out.print(OUTPUT_AFTER);


for (int i = 0; i < a.length; i++) {


System.out.print(a[i] + " ");


}


}





基数排序方法


private static void sort(int[] array) {


// 找到最大数,确定要排序几趟


int max = 0;


for (int i = 0; i < array.length; i++) {


if (max < array[i]) {


max = array[i];


}


}


// 判断位数


int times = 0;


while (max > 0) {


max = max / 10;


times++;


}


// 建立十个队列


List<ArrayList> queue = new ArrayList<ArrayList>();


for (int i = 0; i < 10; i++) {


ArrayList queue1 = new ArrayList();


queue.add(queue1);


}


// 进行times次分配和收集


for (int i = 0; i < times; i++) {


// 分配


for (int j = 0; j < array.length; j++) {


int x = array[j] % (int) Math.pow(10, i + 1) / (int) Math.pow(10, i);


ArrayList queue2 = queue.get(x);


queue2.add(array[j]);


queue.set(x, queue2);


}


// 收集


int count = 0;


for (int j = 0; j < 10; j++) {


while (queue.get(j).size() > 0) {


ArrayList<Integer> queue3 = queue.get(j);


array[count] = queue3.get(0);


queue3.remove(0);


count++;


}


}


}


}



}

举报

相关推荐

sort

0 条评论