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++;
}
}
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值