数据结构与算法
雪舞飞影
喜欢钻研Android源码的程序猿
展开
-
算法的时间复杂度和空间复杂度
1、时间频度 时间频度是一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。 2、时间复杂度 在刚才提到的时原创 2017-09-06 16:11:19 · 321 阅读 · 0 评论 -
交换排序-冒泡排序
1、概念 冒泡排序:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。 2、算法 public static void bubbleSort(int[] arr) { int length = arr.length;原创 2017-09-06 16:26:38 · 307 阅读 · 0 评论 -
选择排序-直接选择排序
1、概念 直接选择排序:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 2、算法 public static void selectSort(int[] arr) { int length = arr.length; int min; for (int i = 0; i < l原创 2017-09-06 16:18:48 · 255 阅读 · 0 评论 -
交换排序-快速排序
1、举例理解 假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序,首先在这个序列中随便找一个数作为基准数,。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的数放在6的左边。 方法其实很简单:分别从初始序列“6 1 2 7 9 3 4 5 10 8”两端开始“探测”。先从右往原创 2017-09-06 16:29:20 · 712 阅读 · 0 评论 -
插入排序-直接插入排序
1、概念 直接插入排序:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。 2、算法 public static void insertSort(int[] arr) { int length = arr.length; int j, temp; //对整个数组进行检查原创 2017-09-06 16:13:30 · 298 阅读 · 0 评论 -
插入排序-希尔排序
1、概念 希尔排序:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。 以n=10的一个数组49, 38, 65, 97, 26, 13, 27, 49, 55, 4为例 第一次 gap = 10 / 2 = 5 49 38 65 97 26 13 27 49 55 4 1原创 2017-09-06 16:15:19 · 258 阅读 · 0 评论 -
归并排序
1、概念 归并排序 (merge sort) :是一类与插入排序、交换排序、选择排序不同的另一种排序方法,归并的含义是将两个或两个以上的有序表合并成一个新的有序表。 2、算法 public static void mergeSort(int[] nums, int low, int high) { int mid = (low + high) / 2;原创 2017-09-06 16:32:59 · 239 阅读 · 0 评论