算法导论学习笔记一——算法基础
2020-01-13 13:27
78 查看
算法导论学习笔记一——算法基础
本文是机械工业出版社出版的《算法导论(原书第三版)》的学习笔记的第一篇,对应原书第2章——算法基础
算法1.插入排序
思想:首先在当前有序区R[1…i-1]中查找R[i]的正确插入位置k(1≤k≤i-1);然后将R[k..i-1]中的记录均后移一个位置,腾出k位置上的空间插入R[i].时间复杂度theta(n^2)。
void insert_sort(int* a, int n) { int k,i; for (int j = 1; j < n; j++) { k = a[j]; //insert i = j - 1; while ((i >= 0) & (a[i] > k)) { a[i + 1] = a[i]; i = i - 1; } a[i + 1] = k; } }
算法2.选择排序
思想:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
与冒泡排序的区别:冒泡排序每发现当前元素小于下一个元素,就将他们交换,而选择排序在循环结束时才交换。
时间复杂度theta(n^2)。
void select_sort(int* a, int n) { int k, i, min,idx_min; for (int j = 0; j < n; j++) { i = j; min = a[j]; idx_min = i; while (i < n) { if ( min > a[i]) { min = a[i]; idx_min = i; } i++; } swap(&a[j],&a[idx_min]); } } void swap(int* a, int* b) { int temp; temp = *a; *a = *b; *b = temp; }
算法3.归并排序
时间复杂度:每层复杂度为cn,有lgn层,因此时间复杂度为theta(n lg n)。
void merge_sort(int* a, int p,int r) { int q=0; if (p < r) { q = floor((p + r) / 2); merge_sort(a, p, q); merge_sort(a, q+1,r); merge(a, p, q, r); } } void merge(int* a, int p, int q, int r) { int n1, n2,i,j; n1 = q - p + 1; n2 = r - q; int* r1 = new int[n1 + 1]; //动态分配数组 int* r2 = new int[n2 + 1]; for (int i = 0; i < n1; i++) { r1[i] = a[p + i]; } r1[n1] = INT32_MAX;//哨兵数据 for (int i = 0; i < n2; i++) { r2[i] = a[q + +1+i]; } r2[n2] = INT32_MAX; //std::cout << "r1:"; show_arr(r1, n1 + 1); //std::cout << "r2:"; show_arr(r2, n2 + 1); i = 0; j = 0; for (int k = p; k <= r; k++) { if (r1[i] <= r2[j]) { a[k] = r1[i]; i++; } else { a[k] = r2[j]; j++; } } delete[] r1;//记得释放内存 delete[] r2; }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 基础知识 第一部分 算法导论 学习笔记
- Introduction to Algorithms 算法导论 第1章 基础知识 学习笔记及习题解答
- 【学习笔记】算法导论第2章:算法基础
- 算法导论学习笔记-1-基础排序算法
- 【学习笔记】<算法导论>基础知识1.1
- 算法导论学习笔记 第2章 算法基础
- 【算法导论学习笔记】第2章:算法基础
- 动态规划(算法导论学习笔记)
- 机器学习深度学习基础笔记(2)——梯度下降之手写数字识别算法实现
- 算法导论学习笔记-第二十章-斐波那契堆
- 算法基础学习笔记一
- 牛客寒假算法基础集训营6学习笔记
- 算法导论学习笔记——桶排序
- 麻省理工算法导论学习笔记(5)----线性时间排序
- 算法导论学习笔记(16)——图的基本算法
- 深度学习word2vec笔记之基础篇算法篇应用篇--写的非常到位
- 【算法学习笔记】09.数据结构基础 二叉树初步练习2
- 【算法学习笔记】10.数据结构基础 二叉树初步练习3(遍历与递归复习)
- 中位数和顺序统计量---算法导论学习笔记
- 基础数论算法(2) GCD LCM EXGCD 学习笔记