java十大算法

Python026

java十大算法,第1张

算法一:快速排序算法

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。

算法步骤:

1 从数列中挑出一个元素,称为 "基准"(pivot),

2 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

算法二:堆排序算法

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

堆排序的平均时间复杂度为Ο(nlogn) 。

算法步骤:

创建一个堆H[0..n-1]

把堆首(最大值)和堆尾互换

3. 把堆的尺寸缩小1,并调用shift_down(0),目的是把新的数组顶端数据调整到相应位置

4. 重复步骤2,直到堆的尺寸为1

算法三:归并排序

归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

算法步骤:

1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置

3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

4. 重复步骤3直到某一指针达到序列尾

5. 将另一序列剩下的所有元素

java是一种面向对象的编程语言,就java语言本身来说,是种工具。但一般学习的话主要是学习其中的面向对象思想。应该比较简单。 算法分析与设计讲的是一些经典问题的经典解决办法,一般技巧性都比较高,很多理解起来都会很困难,需要有很好的数学基础。至于实现则更需要很好的编程基础。 这两门课我都上过,前者比较简单,但对于初次解除编程的人来说,还是要下点工夫;后者就思想上而言,有一定的数学基础就可以,但总的来说是理解起来比较困难。

有一种非常简单的做法,直接利用现有的java API帮助你解决解决这个问题。

import java.util.Arrays

import java.util.Comparator

public class Test{

//newArray[] 为需要传入的数组对象

public static void reSortArray(String newArray[]){

String[] array = new String[]{"admin","viewer","operator","designer"}//定义标准数组对象

final String str = Arrays.toString(array)//将标准数组对象中的数据转化为String

//使用Arrays类已实现好的数组排序方法,传入要排序的数组,以及比较器

Arrays.sort(newArray,new Comparator<String>(){

public int compare(String o1, String o2) {

return str.indexOf(o1)-str.indexOf(o2)

}} )

System.out.println(Arrays.toString(newArray))//打印出排序后的数组内容

}

public static void main(String[] args) {

Test.reSortArray(new String[]{"operator","viewer","admin"} )//输出admin、viewer、operator

}

}

以上排序操作均由java api帮我们完成,性能方面比我们一个个比较要好的多。楼主如果对上述方法有啥不理解的地方,可以M我。