Expm 1_2 实现快速排序的算法,并尝试采用不同的方法实现线性的划分过程.

时间:2022-04-28 00:10:48
 package org.xiu68.exp.exp1;

 public class Exp1_2 {
//实现快速排序算法,采用不同的方法实现线性划分的过程
public static void main(String[] args) {
int[] arr=new int[]{8,7,6,5,4,3,2,1,0};
quitSort(arr,0,arr.length-1); for(int i=0;i<arr.length;i++)
System.out.print(arr[i]+",");
} //快速排序算法
public static void quitSort(int[] r, int i,int j){
if(i<j){
int middle=partition2(r, i, j);
quitSort(r, i, middle-1);
quitSort(r, middle+1, j);
}
} //快速排序第一种划分算法
public static int partition1(int[] r,int i,int j){
int temp=r[i];
while(i<j){
while(i<j && r[j]>=temp) //从j向前找比temp小的值
j--; if(i<j)
r[i++]=r[j]; //将j指向的值移到i的位置,i往后移一个位置 while(i<j && r[i]<temp) //从i向后找比temp大的值
i++; if(i<j)
r[j--]=r[i];
} r[i]=temp;
return i;
} //快速排序的第二种划分算法
public static int partition2(int[] r,int i,int j){
int temp=r[i];
while(i<j){
//从左往右找比temp大的值
while(i<j && r[i]<temp)
i++;
//从右往左找比temp小的值
while(i<j && r[j]>temp)
j--; //i和j不是同一个位置
if(i<j){
int t=r[j];
r[j]=r[i];
r[i]=t;
}
}
return i;
} }