配色: 字号:
快速排序
2013-03-27 | 阅:  转:  |  分享 
  
packagelgh;



importjava.io.BufferedReader;

importjava.io.IOException;

importjava.io.InputStreamReader;





publicclassQuickSort{



publicstaticvoidquickSort(ElementelementArray[],intstartIndex,

intendIndex){

if(startIndex
intq=partition(elementArray,startIndex,endIndex);

quickSort(elementArray,startIndex,q-1);//对左半段排序

quickSort(elementArray,q+1,endIndex);//对右半段排序

}

}





privatestaticintpartition(ElementelementArray[],intstartIndex,

intendIndex){

inti=startIndex;

intj=endIndex+1;

Elementx=elementArray[startIndex];

ElementelemTmp;



while(true){

while((elementArray[++i].compareTo(x)<0)&&(i
while(elementArray[--j].compareTo(x)>0);

if(i>=j){

break;

}

elemTmp=elementArray[i];

elementArray[i]=elementArray[j];

elementArray[j]=elemTmp;

}

elementArray[startIndex]=elementArray[j];

elementArray[j]=x;

returnj;

}

publicstaticvoidoutputResult(ElementelementArray[]){

intlength=elementArray.length;



System.out.println("排序前数据系列:");

for(inti=0;i
for(intj=0;j
if(elementArray[j].id==(i+1)){

if(elementArray[j].isNum){

System.out.print(elementArray[j].num+"");

}else{

System.out.print(elementArray[j].string+"");

}

}

}

}



System.out.println("\n快速排序结果为:");

if(elementArray[0].isNum){

for(inti=0;i
System.out.print(elementArray[i].num+"");

}

}else{

for(inti=0;i
System.out.print(elementArray[i].string+"");

}

}



System.out.println("\n快速排序后下标秩序为:");

for(inti=0;i
System.out.print(elementArray[i].id+""); }

System.out.println("\n");

}

publicstaticclassElementimplementsComparable{

intid;//编号

intnum;//数字

booleanisNum=false;//数字标识

Stringstring;//字符串



publicElement(intid,intnum){

this.id=id;

this.num=num;

isNum=true;

}



publicElement(intid,Stringstring){

this.id=id;

this.string=string;

}



publicintcompareTo(Objectobject){

if(isNum){

doubleobjNum=((Element)object).num;

if(num
return-1;

}

if(num==objNum){

return0;

}

return1;

}else{

StringobjStr=((Element)object).string;

if(string.compareTo(objStr)>0){

return1;

}

if(string.compareTo(objStr)<0){

return-1;

}

return0;

}

}

}



publicstaticvoidmain(Stringarg[]){

Stringinput;

Stringflag;

BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));



do{

try{

do{

System.out.println("请选择数字功能键:1--数字,2--字符串,3--退出");

flag=in.readLine().trim();

}while(!(flag.equals("1")||flag.equals("2")||flag

.equals("3")));



if(flag.equals("3")){

break;

}

System.out.println("请输入数据,数据之间必须以顿号间隔分开!");



input=in.readLine().trim();

input=in.readLine().replaceAll("","");

Stringdatas[]=input.split("[、]");

intn=datas.length;

Element[]elemArray=newElement[n];



if(flag.equals("1")){

for(inti=1;i<=n;i++){

intd=Integer.parseInt(datas[i-1]);

Elementelem=newElement(i,d);

elemArray[i-1]=elem;

}

}else{

for(inti=1;i<=n;i++){

Elementelem=newElement(i,datas[i-1]);

elemArray[i-1]=elem;

}

}



quickSort(elemArray,0,n-1);//快速排序

outputResult(elemArray);//输出快速排序后结果



}catch(IOExceptione){

e.printStackTrace();

}

}while(true);

}

}

献花(0)
+1
(本文系树树8023首藏)