这是我自己想的排序方法的第二个版本
里面的原理就是数组中的每一个数,放到另一个数组中,并且是以要排序的数组的数字作为索引,再将第二个数组中的数字按照第二个数组的顺序依次放到第一个数组中。
代码
class Rule {
class Node {
Node head = null;
Node next = null;
public int value;
public Node ( int value) {
this . value = value;
}
public Node ( ) {
}
}
public void sort ( int [ ] arr) {
int max = 0 ;
int min = 0 ;
int temp = 0 ;
int j = arr. length - 1 ;
for ( int i = 0 ; i < arr. length - 1 ; i++ ) {
if ( arr[ i] > arr[ i + 1 ] ) {
temp = arr[ i + 1 ] ;
arr[ i + 1 ] = arr[ i] ;
arr[ i] = temp;
}
max = arr[ i + 1 ] ;
if ( arr[ j] < arr[ j - 1 ] ) {
temp = arr[ j] ;
arr[ j] = arr[ j - 1 ] ;
arr[ j - 1 ] = temp;
}
j-- ;
min = arr[ 0 ] ;
}
Node[ ] node = new Node [ max + 1 ] ;
for ( int i = 0 ; i < node. length; i++ ) {
node[ i] = new Node ( - 1 ) ;
}
add ( node, arr) ;
int y = 0 ;
for ( int i = 0 ; i < node. length; i++ ) {
if ( node[ i] . head != null) {
arr[ y] = node[ i] . head. value;
Node n = node[ i] . head. next;
while ( n != null) {
arr[ ++ y] = n. value;
n = n. next;
}
y++ ;
}
}
System. out. println ( Arrays. toString ( arr) ) ;
}
public void add ( Node[ ] node, int [ ] arr) {
for ( int i = 0 ; i < arr. length; i++ ) {
addNode ( arr[ i] , node) ;
}
}
public void addNode ( int d, Node[ ] node) {
Node newNode = new Node ( d) ;
if ( node[ d] . head == null) {
node[ d] . head = newNode;
return ;
}
Node tmp = node[ d] . head;
while ( tmp. next != null) {
tmp = tmp. next;
}
tmp. next = newNode;
}
}
public class Demo03 {
public static void main ( String[ ] args) {
int [ ] a = { 1 , 2 , 6 , 15 , 8 , 6 , 7 , 1 , 2 , 1 , 1 , 15 } ;
Rule r = new Rule ( ) ;
r. sort ( a) ;
}
}
这个排序有很大的局限性,只能排数字,由于是由索引排序,所以只能排非负数,排负数会报错