java算法是什么意思,算法和java的区别

  java算法是什么意思,算法和java的区别

  java不是算法。

  Java是一门面向对象编程语言,是一种广泛使用的计算机编程语言,具有跨平台、面向对象和泛型编程的特点,广泛应用于企业级Web应用开发和移动应用开发。

  算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表了一种描述解决问题的策略机制的系统方式。也就是说,对于某一标准输入,可以在有限的时间内获得所需的输出。如果一个算法有缺陷或者不适合某个问题,执行这个算法并不能解决问题。不同的算法可能使用不同的时间、空间或效率来完成相同的任务。算法的好坏可以用空间复杂度和时间复杂度来衡量。

  我们可以用java语言实现不同的算法。

  Java的几种常见排序算法

  1.气泡分类

  如何解决写爬虫IP受阻的问题?立即使用。

  a、冒泡排序,就是通过每次遍历得到最大/最小值。

  B.将最大/最小值放在尾部/头部。

  c,然后除以最大值/最小值,剩下的数据遍历得到最大值/最小值。

  d、代码实现

  公共静态void main(String[] args) {

  int arr[]={8,5,3,2,4 };

  //冒泡

  for(int I=0;长度;i ) {

  //外部循环,遍历次数

  for(int j=0;j arr . length-I-1;j ) {

  //内部循环,升序(如果前一个值大于最后一个值,则交换)

  //内层循环一次以获得最大值

  if (arr[j] arr[j 1]) {

  int temp=arr[j 1];

  arr[j 1]=arr[j];

  arr[j]=temp;

  }

  }

  }

  } E .排序过程(红色:移动数据)

  2.选择排序

  a、将第一个值作为最小值。

  b、然后通过与后续比较找出最小值和下标

  c .交换本次遍历的初始值和最小值。

  d、描述:每次遍历时,前面找到的最小值视为有序列表,后面视为无序列表,然后每次遍历无序列表,找到最小值。

  e、代码实现

  公共静态void main(String[] args) {

  int arr[]={6,5,3,2,4 };

  //选择

  for(int I=0;长度;i ) {

  //默认情况下第一个是最小的。

  int min=arr[I];

  //记录最小的下标

  int index=I;

  //通过与后来的数据比较,最小值和下标

  for(int j=I 1;j排列长度;j ) {

  if (min arr[j]) {

  min=arr[j];

  index=j;

  }

  }

  //然后把最小值和这个周期的起始值交换。

  int temp=arr[I];

  arr[I]=min;

  arr[index]=temp;

  //注意:将I前面的数据视为排队队列,I后面的数据视为无序队列。每次你只需要找到你不需要的最小值并替换它。

  }

  } F .排序过程(红色:移动数据)

  3.插入排序

  A.默认情况下,比较从第二个数据开始。

  b、如果第二个数据小于第一个数据,则交换它。然后和第三个数据对比。如果比之前小,就插入(狡猾)。否则,退出循环。

  C.描述:默认情况下,第一个数据被视为有序列表,后面的无序列表循环每个数据。如果它小于前面的数据,它将被插入(交换)。否则,退出。

  d、代码实现

  公共静态void main(String[] args) {

  int arr[]={7,5,3,2,4 };

  //插入排序

  for(int I=1;长度;i ) {

  //外部循环,从第二个开始比较

  for(int j=I;j 0;j - ) {

  //内存循环,与前一个顺序的数据进行比较,如果后面的数据小于前面的数据就交换。

  if (arr[j] arr[j - 1]) {

  int temp=arr[j-1];

  arr[j-1]=arr[j];

  arr[j]=temp;

  }否则{

  //如果不小于,则表示插入完成,退出内循环。

  打破;

  }

  }

  }

  } E .排序过程(红色:有序,黑色:无序)

  4.希尔排序(插入排序变体版本)

  a、基本上和insert sort一样。

  b,不同的是每个周期的步长是通过减半实现的。

  c、描述:基本原理类似于插入排序,区别在于。插入排序是通过分隔多个数据来执行的。

  d、代码实现

  公共静态void main(String[] args) {

  int arr[]={7,5,3,2,4 };

  //希尔排序(插入排序变量)

  for(int I=arr . length/2;I 0;i /=2) {

  //i层循环控制步长

  for(int j=I;j排列长度;j ) {

  //j控制无序结束的起始位置。

  for(int k=j;k0k-I=0;k -=i) {

  if (arr[k] arr[k - i]) {

  int temp=arr[k-I];

  arr[k-I]=arr[k];

  arr[k]=temp;

  }否则{

  打破;

  }

  }

  }

  //j,k是插入排序,但是步长是I。

  }

  }e、排序过程(步骤4/2/1)

  5.快速分类

  A.确认列表中第一个数据是中间值,第一个值视为空位(低位指针空位)。

  b,然后在队列的其余部分,因为有两个指针(高和低)左和右。

  C.启动高位指针向左移动。如果遇到小于中间值的数据,则将此数据赋给低位指针空位,将高位指针数据视为空位值(高位指针空位)。然后先向右移动低位指针,切换低位指针移动。

  d、当低位指针移动到大于中间值时,将其赋给高位指针空缺的地方。然后高指针向左移动,高指针移动。重复C和D操作。

  e .退出,直到高指针和低指针相等,并将中间值赋给相应的指针位置。

  f,然后把中间值的左右两边看做一个行的列表,进行快速排序操作。

  g、代码实现

  公共静态void main(String[] args) {

  int arr[]={7,5,3,2,4,1,8,9,6 };

  //快速排序

  int low=0;

  int high=arr . length-1;

  快速排序(arr,low,high);

  }

  public static void quick sort(int[]arr,int low,int high) {

  //如果指针在同一个位置(只有一个数据时),退出

  if(高-低1) {

  返回;

  }

  //标记,从高指针或低指针开始(默认高指针)

  布尔标志=真;

  //记录指针的实际位置

  int start=低电平;

  int end=高;

  //默认中间值是低位指针的第一个值

  int mid value=arr[low];

  while (true) {

  //高指针移动

  如果(标志){

  //如果列表右侧的数据大于中间值,则向左移动

  if(arr[高]中间值){

  高-;

  } else if (arr[high] midValue) {

  //如果小于,则覆盖初始低位指针值,并移动低位指针。标志位被改变以从低位指针移动。

  arr[低]=arr[高];

  低;

  flag=false

  }

  }否则{

  //如果低位指针数据小于中间值,低位指针向右移动

  if (arr[low] midValue) {

  低;

  } else if (arr[low] midValue) {

  //如果低位指针的值大于中间值,则在高位指针停留时覆盖数据,并将高位指针向左移动。切换到高速指针移动

  arr[高]=arr[低];

  高-;

  flag=true

  }

  }

  //当两个指针的位置相同时,找到中间值的位置,退出循环。

  if(低==高){

  arr[low]=中间值;

  打破;

  }

  }

  //然后就是,中间值左边的那个小于中间值。右边的大于中间值。

  //然后快速排序左右列表。

  快速排序(arr,start,low-1);

  quickSort(arr,low 1,end);

  }h、排序流程

  6.合并和排序

  a,平分单子。

  b、拆分最小最快的时候,按照原来的拆分合并最小的块。

  C.合并时,开始比较左右两片的左侧尺寸。小数据到一个新的块中。

  d、描述:很简单,先把数据对半拆分成最小单元,然后把两半数据合并成一个有序列表。

  e、代码实现

  公共静态void main(String[] args) {

  int arr[]={7,5,3,2,4,1,6 };

  //合并排序

  int start=0;

  int end=arr . length-1;

  mergeSort(arr,start,end);

  }

  public static void merge sort(int[]arr,int start,int end) {

  //确定拆分不是最小单位。

  if(结束-开始0) {

  //再拆分一次,知道是一个一个拆分成数据。

  mergeSort(arr,start,(start end)/2);

  mergeSort(arr,(start end)/2 1,end);

  //记录开始/结束位置

  int left=start

  int right=(start end)/2 1;

  //记录每个小单元的排序结果

  int index=0;

  int[]result=new int[end-start 1];

  //如果分数检查后的两个数据仍然存在

  while (left=(开始结束)/2 right=结束){

  //比较两段数据的大小,然后赋值,并移动下标

  if (arr[left]=arr[right]) {

  结果[索引]=数组[左];

  左;

  }否则{

  结果[索引]=数组[右];

  对;

  }

  //移动单位记录的下标

  指数;

  }

  //当某段数据不存在时

  while (left=(开始结束)/2 right=结束){

  //直接赋值给记录下标

  if (left=(start end)/2) {

  结果[索引]=数组[左];

  左;

  }否则{

  结果[索引]=数组[右];

  对;

  }

  指数;

  }

  //最后把新的数据赋给原来的链表,是对应块后的下标。

  for(int I=start;i=结束;i ) {

  arr[i]=结果[I-start];

  }

  }

  }f、排序过程

  推荐教程:java教程以上是Java。是算法吗?更多详情请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

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