一、排序算法
1.快速排序
不稳定,时间复杂度最理想 O(nlogn) 最差时间O(n^2)
package com.test;public class fasf{/*** 快速排序* @param args*/public static void main(String[]args){//不用设置大小int [] num={3,6,5,4,7,2,9};fasf f=new fasf();f.quicksort(num, 0, num.length-1);for (int i = 0; i < num.length; i++) {System.out.println(num[i]);}}public void quicksort(int[] a,int left,int right){int i=left;int j=right;//参照数int temp=a[left];if(i>=j){return;}while(i<j){//从右向左寻找小于temp的数while(i<j&&a[j]>=temp){j--;}//若已找到if(i<j){a[i]=a[j];i++;}//从左向右寻找大于temp的数while(i<j&&a[i]<=temp){i++;}//若已找到if(i<j){a[j]=a[i];j--;}}//将参照数赋给已排序好的右边a[i]=temp;//左边递归quicksort(a, left, i-1);//右边递归quicksort(a, i+1, right);}}
2.选择排序:不稳定,时间复杂度 O(n^2)
3.插入排序:稳定,时间复杂度 O(n^2)
4。冒泡排序:稳定,时间复杂度 O(n^2)
5。堆排序:不稳定,时间复杂度 O(nlog n)
6.归并排序
1.性能
稳定,时间复杂度 O(nlog n)
2.算法思路
分治法的步骤主要包括以下四步:
- 分割子问题:将原问题分割成若干个子问题,这些子问题与原问题在结构上相同或相似,通常每个子问题的规模都比较小。
- 解决子问题:对每个子问题进行递归解决,即对每个子问题重复执行分割和解决的过程,直到子问题的规模足够小可以直接解决。
- 合并子问题解:将所有子问题的解合并为一个解,这个解就是原问题的解。
- 返回结果:返回合并后的解。
如下图,显示了详细的计算过程
7。希尔排序:不稳定,时间复杂度平均时间 O(nlogn)
二、查找算法
1.二分查找
算法思想:又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。