import java.util.LinkedList;
import java.util.Random;
class Num{
private int pos1;
public int getPos1() {
return pos1;
}
public void setPos1(int pos1) {
this.pos1 = pos1;
}
public int getPos10() {
return pos10;
}
public void setPos10(int pos10) {
this.pos10 = pos10;
}
public int getPos100() {
return pos100;
}
public void setPos100(int pos100) {
this.pos100 = pos100;
}
public int getPos1000() {
return pos1000;
}
public void setPos1000(int pos1000) {
this.pos1000 = pos1000;
}
private int pos10;
private int pos100;
private int pos1000;
public Num(int x) {
pos1=x%10;
pos10=((x%1000)%100)/10;
pos100=(x%1000)/100;
pos1000=x/1000;
}
public String toString() {
String str="";
if (pos1000!=0) {
str+=pos1000;
}
if (pos100!=0) {
str+=pos100;
}
if (pos10!=0) {
str+=pos10;
}
str+=pos1;
return str;
}
}
public class LSD_No_Position {
@SuppressWarnings("unchecked")
static void lsdSort(LinkedList<Num> lst) {
LinkedList[] digit=new LinkedList[10];
for (int i = 0; i < digit.length; i++)digit[i]=new LinkedList();//不清楚里面有多少个值,用LinkedList装
//分配
while (lst.size()>0) {
Num n=lst.remove();
digit[n.getPos1()].add(n);
}
//收集
for (int i = 0; i < digit.length; i++)
lst.addAll(digit[i]);
digit=new LinkedList[10];
for (int i = 0; i < digit.length; i++)digit[i]=new LinkedList();//不清楚里面有多少个值,用LinkedList装
//分配
while (lst.size()>0) {
Num n=lst.remove();
Num n2=n;
digit[n.getPos10()].add(n);
}
//收集
for (int i = 0; i < digit.length; i++)lst.addAll(digit[i]);
digit=new LinkedList[10];
for (int i = 0; i < digit.length; i++)digit[i]=new LinkedList();//不清楚里面有多少个值,用LinkedList装
//分配
while (lst.size()>0) {
Num n=lst.remove();
int x=n.getPos100();
digit[n.getPos100()].add(n);
}
//收集
for (int i = 0; i < digit.length; i++)lst.addAll(digit[i]);
digit=new LinkedList[10];
for (int i = 0; i < digit.length; i++)digit[i]=new LinkedList();//不清楚里面有多少个值,用LinkedList装
//分配
while (lst.size()>0) {
Num n=lst.remove();
int x1=n.getPos1();
int x10=n.getPos10();
int x100=n.getPos100();
int x1000=n.getPos1000();
digit[n.getPos1000()].add(n);
}
//收集
for (int i = 0; i < digit.length; i++)lst.addAll(digit[i]);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Random r=new Random();
LinkedList<Num> list=new LinkedList<Num>();
/* for (int i = 0; i < 5; i++) {
list.add(new Num(r.nextInt(10000)));
}*/
list.add(new Num(2740));
list.add(new Num(6263));
list.add(new Num(5156));
list.add(new Num(623));
list.add(new Num(9345));
lsdSort(list);
System.out.println(list);
}
}
以上代码用随机数放进去,结果未排序,但是换成随机生成对应的数放进去,结果就是排序的,求解,若解决的请站内联系
从键盘读入一个由字母构成的串(不大于30个字符)。从该串中取出3个不重复的字符,求所有的取法。取出的字符,要求按字母升序排列成一个串。
不同的取法输出顺序可以不考虑。
例如:
输入:
abc
则输出:
abc
输入:
abcd
则输出:
abc
abd
acd
bcd
输入:
abcaa
则输出:
abc
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class UniqueAlphaSort {
/**
* @param args
*/
@SuppressWarnings("unchecked")
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String str=scanner.nextLine();
Set alphaSet=new HashSet();
for (int i = 0; i < str.length(); i++) {
alphaSet.add(str.charAt(i));
}
List<Character> list=new ArrayList<Character>();
Iterator iterator=alphaSet.iterator();
while (iterator.hasNext()) {
list.add((Character)iterator.next());
}
//排序
for (int i = list.size()-1; i >0 ; i--) {
for (int j = 0; j < i; j++) {
if (list.get(j)>list.get(j+1)) {
char tmp=list.get(j);
list.set(j, list.get(j+1));
list.set(j+1, tmp);
}
}
}
for (int i = 0; i < list.size()-2; i++) {
for (int j = i+1; j < list.size()-1; j++) {
for (int j2 = j+1; j2 < list.size(); j2++) {
String x=list.get(i).toString();
String x1=list.get(j).toString();
String x2=list.get(j2).toString();
System.out.println(x+x1+x2);
}
}
}
}
}
本文介绍了一个基于Java实现的LSD排序算法案例,并探讨了该算法在特定输入情况下的表现。此外,还提供了一个从给定字符串中选择三个不同字母并按升序排列的解决方案。

6716

被折叠的 条评论
为什么被折叠?



