/Algorithm

常用算法集合,方便日后使用的时候到这来找

Primary LanguageJava

Algorithm

常用算法集合,方便日后使用的时候到这来找,java项目
rsa加密算法:
http://witcheryne.iteye.com/blog/2171850 支持java,ios,android

排序算法:

  • 选择排序
    1.基本**:比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换......第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成. 2.平均时间复杂度:O(n2)
    3.空间复杂度:O(1) (用于交换和记录索引)
    4.稳定性:不稳定 (比如序列【5, 5, 3】第一趟就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)
  • 冒泡排序
    1.基本**:依次比较相邻的数据,将小数据放在前,大数据放在后;即第一趟先比较第1个和第2个数,大数在后,小数在前,再比较第2个数与第3个数,大数在后,小数在前,以此类推则将最大的数"滚动"到最后一个位置;第二趟则将次大的数滚动到倒数第二个位置......第n-1(n为无序数据的个数)趟即能完成排序 2.平均时间复杂度:O(n2) 3.空间复杂度:O(1) (用于交换) 4.稳定性:稳定
  • 插入排序
    1.基本**:插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序;第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中;第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构成的有序数组中......第N-1次,数组前N-1个元素组成有序的数组,将数组的第N个元素插入由N-1个元素构成的有序数组中,则完成了整个插入排序。
    2.平均时间复杂度:O(n2) 3.空间复杂度:O(1) (用于记录需要插入的数据) 4.稳定性:稳定
  • 快速排序
    1.基本**:快速排序采用分治法进行排序,首先是分割,选取数组中的任意一个元素value(默认选用第一个),将数组划分为两段,前一段小于value,后一段大于value;然后再分别对前半段和后半段进行递归快速排序
    2.平均时间复杂度:O(nlog2n)
    3.空间复杂度:O(n)
    4.稳定性:不稳定