算法
数据结构与算法
算法与数据结构相互依存,例如,寻找数组的最大值,数组就是一种数据结构,寻找最大值的算法是依附于数组的。
时间复杂度
- T(n):算法中基本操作的重复执行次数。
i = 1;i= 2...... i=10;表示i重复执行赋值了10次,但每次不受数据量的影响,单独赋值。
存在一个函数f(n)和T(n)的走向大概一致,对此相比求极限等于一个常数,说明两者同阶无穷小,所以说f(n)和T(n)是同数量级函数。T(n) = O(f(n))。
- 只考虑最高次幂就是与f(n)同量级的。
常见的时间复杂度
O(1)
O(1):没有循环体,因为每一个都直接赋值,赋值不会随着数据量的增大而改变速率,所以f(n)是一条直线,是一个常数。
o(log2n)
O(n)
O(nlog2n)
O(n²)
其他
排序算法
冒泡排序
javapublic class test { public static void main(String[] args) { int[] arrlist = new int[]{4,7,8,6,1,2,5}; maopao(arrlist); for (int i = 0; i < arrlist.length; i++) { System.out.println(arrlist[i]); } } private static void maopao(int[] arr){ for (int i = 0; i < arr.length-1; i++) { //外层循环几次 boolean flag = true; for (int j = i+1; j < arr.length; j++) { if (arr[i] > arr[j]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; flag = false; } } if (flag) { break; } } } }
选择排序
从数组中选择最小元素,将它与数组的第一个元素交换位置。再从数组剩下的元素中选择出最小的元素,将它与数组的第二个元素交换位置。不断进行这样的操作,直到将整个数组排序。
javaprivate static void selectOrder(int[] arr){ for (int i = 0; i < arr.length-1; i++) { int min = i; for (int j = i+1; j < arr.length; j++) { if (arr[j] < arr[min]) { min = j; } } int temp = arr[i]; arr[i] = arr[min]; arr[min] = temp; } }