public class Shellsort2 {
public static void sort(List<Integer> items){
if(items.size()>1){
List<Integer> smaller=new ArrayList<>();
List<Integer> same=new ArrayList<>();
List<Integer> larger=new ArrayList<>();
Integer chosenItem=items.get(items.size()/2);
for(Integer i:items){
if(i<chosenItem)
smaller.add(i);
else if(i>chosenItem)
larger.add(i);
else
same.add(i);
}
sort(smaller);
sort(larger);
items.clear();
if(smaller.size()>0){
items.addAll(smaller);
}
if(same.size()>0){
items.addAll(same);
}
if(larger.size()>0){
items.addAll(larger);
}
}
}
}
public static void sort(List<Integer> items){
if(items.size()>1){
List<Integer> smaller=new ArrayList<>();
List<Integer> same=new ArrayList<>();
List<Integer> larger=new ArrayList<>();
Integer chosenItem=items.get(items.size()/2);
for(Integer i:items){
if(i<chosenItem)
smaller.add(i);
else if(i>chosenItem)
larger.add(i);
else
same.add(i);
}
sort(smaller);
sort(larger);
items.clear();
if(smaller.size()>0){
items.addAll(smaller);
}
if(same.size()>0){
items.addAll(same);
}
if(larger.size()>0){
items.addAll(larger);
}
}
}
}
测试:
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> a=new ArrayList<>();
a.add(1);
a.add(5);
a.add(2);
a.add(4);
a.add(7);
a.add(3);
//Shellsort.shellsort(nums);
//Heapsort.heapsort(nums);
//MergeSort.mergeSort(nums);
Shellsort2.sort(a);
for(Integer num:a){
System.out.print(num+" ");
}
效果:
1 2 3 4 5 7