java排序的方法,哪些排序是使用了分治算法
问题描述:
输入一个数字n后,输入n个数字,将n个数字排序后输出。
输入:
如何解决写爬虫IP受阻的问题?立即使用。
输出:
算法设计:
快速排序的基本思想是基于分治策略,其算法思想如下:
(1)分解:首先从序列中取一个元素作为基准元素。以基准元素为基础,将问题分解成两个子序列,左边的子序列小于等于基准元素,右边的子序列大于基准元素。
(2)治理:快速排序两个子序列。
(3)合并:将有序的两个子序列合并在一起,得到原问题的解。
免费视频教程推荐:java学习视频
设当前待排列的序列为R[low:high],其中lowhigh,如果序列的规模足够小,则直接进行排序,否则分3步处理:
(1)分解:选取R[low:high]中的一个元素R[pivot]作为标签,将待排序的序列分成R[low:pivot-1]和R[pivot 1:high]两个序列,使序列R[low:pivot]中所有元素的值小于等于R[pivot],序列R[pivot]
(2)治理:通过递归调用快速排序对两个子序列R[low:pivot-1]和R[pivot 1:high]进行排序。
(3)合并:因为R[low:pivot-1]和R[pivot:high]的排序是在原位完成的,所以在R[low:pivot-1]和R[pivot 1:high]已经排序之后,序列R[low:high]已经排序,而不需要在合并步骤中做任何事情。
示例代码:
//程序目的:用分治法快速排序解决排序问题
导入Java . util . scanner;
公共类文本2 {
公共静态void swap (int array [],int a,int b){//交换函数
内部温度;
temp=array[a];
array[a]=array[b];
array[b]=temp;
}
公共静态int分区(int r[],int low,int high){
int i=低;
int j=高;
int pivot=r[low];//基准元素
while(ij) {
While (i j r[j] pivot) //向左扫描
j-;
如果(i j) {
swap(r,I,j);
}
While (i j r[i]=pivot) {//向右扫描
我;
}
如果(i j) {
swap(r,I,j-);
}
}
返回I;
}
Public static void快速排序(int r [],int low,int high){//一种快速排序递归算法
int mid
if(低高){
mid=分区(R,低,高);//参考位置
快速排序(R,低,中1);//左区间递归快速排序
快速排序(R,中1,高);//右区间递归快速排序
}
}
公共静态void main(String args[]){
Scanner sc=新扫描仪(system . in);
int I;
int n;//数据的数量
System.out.println(请先输入要排序的元素个数);
n=sc . nextint();
System.out.println(请输入要排序的数据);
int[]a=new int[n];
for(I=0;在;i ){
a[I]=sc . nextint();
}
快速排序(a,0,n-1);
System.out.println(排序数据);
for(I=0;在;i ){
system . out . print(a[I] );
}
system . out . println();
}
}运行结果:
相关学习课程推荐:java入门。以上是如何利用分治法中的快速排序来解决java中排序问题的细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。