分治法_快速排序(另外含随机快速排序)

今天,再次分享分治法的第三个经典算法:快速排序(含随机快速排序)
需要的朋友请自取哦~
欢迎大家与我一起交流呀~~
一起学习,一起进步!

<
public class quickSort {

static Comparable[] a;//待排数组

//交换两元素类
	static class MyMath {
		public static void swap(Comparable[] a, int i, int j) {
			Comparable c=a[i];
			a[i]=a[j];
			a[j]=c;
		}
	}
	
	//快速排序算法
 static  void qSort(int p,int r) {
	if(p0);//找到比基准元素小的
		if(i>=j)break;
		MyMath.swap(a,i,j);//交换
	}
	a[p]=a[j];
	a[j]=x;
	
	return j;
}
public static void main(String[] args) {
	a=new Comparable[8];
	a[0]=8;
	a[1]=4;
	a[2]=3;
	a[3]=7;
	a[4]=1;
	a[5]=5;
	a[6]=6;
	a[7]=2;
	System.out.println("快速排序前:");
	for(int i=0;i<8;i++) {
		System.out.print(a[i]+" ");
	}
	System.out.println();
	qSort(0,7);//快排
	System.out.println("快速排序后:");
	for(int i=0;i<8;i++) {
		System.out.print(a[i]+" ");
	}

}

}

运行结果:
分治法_快速排序(另外含随机快速排序)_第1张图片

由于快速排序算法的性能与划分是否对称有关,所以以下设计随机化的快速排序算法解决划分对称性问题

<
package 分治法_快速排序;

public class RandomQuitSort {

static Comparable[] a;//待排数组

//交换两元素类
	static class MyMath {
		public static void swap(Comparable[] a, int i, int j) {
			Comparable c=a[i];
			a[i]=a[j];
			a[j]=c;
		}
	}
	
	//随机快速排序算法
 static  void randomqSort(int p,int r) {
	if(p0);//找到比基准元素小的
		if(i>=j)break;
		MyMath.swap(a,i,j);//交换
	}
	a[p]=a[j];
	a[j]=x;
	
	return j;
}
public static void main(String[] args) {
	a=new Comparable[8];
	a[0]=8;
	a[1]=4;
	a[2]=3;
	a[3]=7;
	a[4]=1;
	a[5]=5;
	a[6]=6;
	a[7]=2;
	System.out.println("随机快速排序前:");
	for(int i=0;i<8;i++) {
		System.out.print(a[i]+" ");
	}
	System.out.println();
	randomqSort(0,7);//快排
	System.out.println("随机快速排序后:");
	for(int i=0;i<8;i++) {
		System.out.print(a[i]+" ");
	}

}

}

运行结果:
分治法_快速排序(另外含随机快速排序)_第2张图片

你可能感兴趣的:(分治法_快速排序(另外含随机快速排序))