java排序的方法,哪些排序是使用了分治算法

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: