LSD链式基数对数值排序BUG;列出串中有顺序的三个字符

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]);
/*更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/*/
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);
}
}
}
}
}

作者:csdn博客 u010026901

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int
, list
, new
, scanner
, close() scanner java
, linkedlist
, digital
, public
, pos
, lenet iter 10000
, scanner键盘输入stringjava
, LST基数排序
addAll
链式基数排序、链式基数排序算法、链式基数排序代码、链式开沟机、链式法则,以便于您获取更多的相关知识。

时间: 2024-11-01 22:42:36

LSD链式基数对数值排序BUG;列出串中有顺序的三个字符的相关文章

如何理解java当中的链式方法,需要new关键词吗,如何区分匿名对象,

问题描述 如何理解java当中的链式方法,需要new关键词吗,如何区分匿名对象, 如何理解java当中的链式方法,需要new关键词吗,如何区分匿名对象和链式方法A( ).B( )=?new A( ).B( )的运算顺序是先new A( )再.B( )吗,还是先A( ).B( )再new A( ).B( )有点会混淆的感觉 解决方案 那个是内部类的调用方法,,不必纠结

线性表的链式表示

以下为操作链表的算法,该链表为动态单链表. 链表以头指针为索引,头指针指向头节点,头节点指向首节点,以此类推,直到尾节点. 头节点中不存放数据,只存放指向首节点的指针, 设置头节点的目的是为了方便对链表的操作,如果不设置头节点,而是直接由头指针指向首节点, 这样在对头指针后的节点进行插入删除操作时就会与其他节点进行该操作时有所不同,便要作为一种特殊情况来分析 操作系统:ubuntu 编译软件:gcc 结果截图: 源代码: #include<stdio.h> #include<stdlib

数据结构Java实现07----队列:顺序队列&amp;顺序循环队列、链式队列、顺序优先队列

一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列. 下图是一个依次向队列中插入数据元素a0,a1,...,an-1后的示意图: 上图中,a0是当前 队头数据元素,an-1是当前 队尾数据元素. 为了

BP算法双向传,链式求导最缠绵(深度学习入门系列之八)

更多深度文章,请关注:https://yq.aliyun.com/cloud 系列文章: 一入侯门"深"似海,深度学习深几许(深度学习入门系列之一)人工"碳"索意犹尽,智能"硅"来未可知(深度学习入门系列之二)神经网络不胜语,M-P模型似可寻(深度学习入门系列之三)"机器学习"三重门,"中庸之道"趋若人(深度学习入门系列之四)Hello World感知机,懂你我心才安息 (深度学习入门系列之五)损失函数减肥

有序链式队列

  编写头文件 struct queue {     int num;            //代表数据     int high;           //优先级1111     struct queue *pNext;//存储下一个节点的地址 }; typedef  struct queue Queue;                           //简化队列 Queue * init(Queue *queueHead);                        /

PHP简单数据库操作类实例【支持增删改查及链式操作】_php技巧

本文实例讲述了PHP简单数据库操作类.分享给大家供大家参考,具体如下: 在进行项目开发时,数据库是必不可少的东西了.但是很多时候却又对数据库SQL语句的繁杂而感到头疼.提供一个我自己使用的数据库操作类(模型Model),供大家使用.支持增.删.改.查,支持链式操作,代码不到100行,非常小巧方便,很适合小项目的快速部署使用. /** * * @Authot: summer * * @E-mail: wenghang1228@me.com * * @Data: 2015-02-06 * * @Pr

jQuery链式操作的问题

两个问题 1.jQuery的链式操作是如何实现的? 2.为什么要用链式操作? 大家认为这两个问题哪个好回答一点呢? 链式操作 原理相信百度一下一大把,实际上链式操作仅仅是通过对象上的方法最后 return this 把对象再返回回来,对象当然可以继续调用方法啦,所以就可以链式操作了.那么,简单实现一个: //定义一个JS类 function Demo() { } //扩展它的prototype Demo.prototype ={ setName:function (name) { this.na

Delphi中使用链式代码

有了一系列的 Helper, Delphi 也可以使用链式代码了. //譬如要把 3.1415926 中的 141 提取为一个整数:var num: Integer; begin num := Pi.ToString().Split(['.'])[1].Substring(0,3).ToInteger(); // 输入 . 后, 记得使用 Ctrl+Space 提示代码 ShowMessage(num.ToString()); // 141end; 我是在写类似下面程序时开始使用的: {程序要求

基本数据结构之队列的链式表示

该队列为链式队列,初建队列时,队头和队尾均指向头结点,头结点中不存放数据,只存放指针,头结点的下一个节点才开始存放数据,这这样做的目的是为了在入队和出队时方便对队列的操作,而不用考虑特殊情况. C语言源代码 #include<stdio.h> #include<stdlib.h> typedef struct Node { int data; struct Node *pNext; }NODE,*PNODE; typedef struct Queue { PNODE front;