排序算法整理

/*
 * 創建日期 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]+"   ");
 }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章