/*
* 創建日期 2005-3-16
*
* TODO 要更改此生成的文件的模板,請轉至
* 窗口 - 首選項 - Java - 代碼樣式 - 代碼模板
*/
package com.pub.reorder;
import java.util.ArrayList;
/**
* @author explorerwen
*
* TODO 要更改此生成的類型註釋的模板,請轉至
* 窗口 - 首選項 - Java - 代碼樣式 - 代碼模板
*/
public final class Reorder {
private static Reorder reorder= null;
private Reorder(){
}
/**
* 得到實例
* @return
*/
public static Reorder getReorder(){
if(reorder == null)
reorder = new Reorder();
return reorder;
}
/**
* 用","拆分字符串
* @param str
* @return
*/
private static String [] splitred(String str){
String t [] = null;
t = str.split(",");
return t;
}
/**
* 冒泡排序基本算法
*
* @param r
* @return
*/
private static String [] bubble(String [] r){
int i =0;
int j =0;
String temp = "";
boolean flag = false;
for(i=0;i<r.length-1;i++){
flag = false;
for(j=0;j<r.length-i-1;j++){
if(Integer.parseInt(r[j].toString()) < Integer.parseInt(r[j+1].toString())){
temp = r[j];
r[j] = r[j+1];
r[j+1] = temp;
flag = true;
}
}
if(!flag)
break;
}
return r;
}
/**
* 冒泡排序
* @param str 字符串於","分隔
* @return
*/
public String [] bublred(String str){
return bubble(splitred(str));
}
/**
* 冒泡排序
* @param String []r
* @return
*/
public String [] bublred(String []r){
return bubble(r);
}
/**
* 冒泡排序
* @param aList
* @return
*/
public String [] bublred(ArrayList aList){
String str = "";
for(int i=0;i<aList.size();i++)
if((String)aList.get(i)!=null)
str += aList.get(i).toString()+",";
return Reorder.getReorder().bublred(str);
}
/**
* 快速排序基本算法
* @param String [] r
* @param low
* @param hight
* @return
*/
private static String [] quick(String [] r,int low,int hight){
int pivotpos = 0;
if(low < hight){
pivotpos = partition(r,low,hight);
quick(r,low,pivotpos-1);
quick(r,pivotpos+1,hight);
}
return r;
}
private static int partition(String [] r,int i,int j){
String pivot = r[i];
while(i<j){
while(i<j && Integer.parseInt(r[j].toString())>=Integer.parseInt(pivot))
j--;
if(i<j)
r[i++] = r[j];
while(i<j && Integer.parseInt(r[i].toString())<=Integer.parseInt(pivot))
i++;
if(i<j)
r[j--] = r[i];
}
r[i] = pivot;
return i;
}
/**
* 快速排序
* @param r
* @return
*/
public String [] quickred(String [] r){
return quick(r,0,r.length-1);
}
/**
* 快速排序
* @param str
* @return
*/
public String [] quickred(String str){
return quick(splitred(str),0,splitred(str).length-1);
}
/**
* 快速排序
* @param aList
* @return
*/
public String [] quickred(ArrayList aList){
String str = "";
for(int i=0;i<aList.size();i++)
if((String)aList.get(i)!=null)
str += aList.get(i).toString()+",";
return Reorder.getReorder().quickred(str);
}
/**
* 直接插入排序基本算法
* @param r
* @return
*/
private static String [] insert(String [] r){
int i=0,j=0;
String temp = "";
for(i=1;i<r.length;i++){
if(Integer.parseInt(r[i].toString()) < Integer.parseInt(r[i-1].toString())){
temp = r[i];
j = i -1;
do{
r[j+1] = r[j];
j--;
}while(j != -1 && Integer.parseInt(temp) < Integer.parseInt(r[j].toString()));
r[j+1] = temp;
}
}
return r;
}
/**
* 直接插入排序
* @param r
* @return
*/
public String [] insertred(String [] r){
return insert(r);
}
/**
* 直接插入排序
* @param str
* @return
*/
public String [] insertred(String str){
return insert(splitred(str));
}
/**
* 直接插入排序
* @param aList
* @return
*/
public String [] insertred(ArrayList aList){
String str = "";
for(int i=0;i<aList.size();i++)
if((String)aList.get(i)!=null)
str += aList.get(i).toString()+",";
return Reorder.getReorder().insertred(str);
}
/**
* 希爾排序基本算法
* @param r
* @return
*/
private static String [] shell(String [] r){
int increment=r.length;
do{
increment = increment/3+1;
shellpass(r,increment);
}while(increment >1);
return r;
}
private static void shellpass(String [] r,int d){
String temp = "";
int j = 0,i = 0;
for(i = d;i<r.length;i++){
if(Integer.parseInt(r[i].toString()) < Integer.parseInt(r[i-d].toString())){
temp = r[i];
j = i - d;
do{
r[j+d] = r[j];
j = j - d;
}while(j >-1 && Integer.parseInt(temp) < Integer.parseInt(r[j].toString()));
r[j+d] = temp;
}
}
}
/**
* 希爾排序
* @param r
* @return
*/
public String [] shellred(String [] r){
return shell(r);
}
/**
* 希爾排序
* @param str
* @return
*/
public String [] shellred(String str){
return shell(splitred(str));
}
/**
* 希爾排序
* @param aList
* @return
*/
public String [] shellred(ArrayList aList){
String str = "";
for(int i=0;i<aList.size();i++)
if((String)aList.get(i)!=null)
str += aList.get(i).toString()+",";
return Reorder.getReorder().shellred(str);
}
/**
* 直接選擇排序基本算法
* @param r
* @return
*/
private static String [] select(String [] r){
int i=0,j=0,k=0;
String temp = "";
for(i=0;i<r.length;i++){
k = i;
for(j=i+1;j<r.length;j++){
if(Integer.parseInt(r[j].toString()) < Integer.parseInt(r[k].toString()))
k = j;
if(k != i){
temp = r[i];
r[i] = r[k];
r[k] = temp;
}
}
}
return r;
}
/**
* 直接選擇排序
* @param r
* @return
*/
public String [] selectred(String [] r){
return select(r);
}
/**
* 直接選擇排序
* @param str
* @return
*/
public String [] selectred(String str){
return select(splitred(str));
}
/**
* 直接選擇排序
* @param aList
* @return
*/
public String [] selectred(ArrayList aList){
String str = "";
for(int i=0;i<aList.size();i++)
if((String)aList.get(i)!=null)
str += aList.get(i).toString()+",";
return Reorder.getReorder().selectred(str);
}
public static void main(String[] args) {
Reorder reorder = Reorder.getReorder();
String [] r = {"13","2","43","41","57","4","88","33"};
String [] t = null;
String str = "23,33,3,4,5,66,56,77,8,77,88,9";
ArrayList aList = new ArrayList();
aList.add("33");
aList.add("22");
aList.add("2");
aList.add("34");
aList.add("1");
aList.add("55");
//t = reorder.bublred(aList);
//t = quick(r,0,r.length-1);
//t = reorder.quickred(aList);
//t = insert(r);
//t = select(r);
t = shell(r);
for(int i =0;i<t.length;i++)
System.out.print(t[i]+" ");
}
}