日常记录:《算法导论》学习笔记之一

    xiaoxiao2021-11-29  20

      算法作为计算编程中的重要组成部分,其意义显而易见,所以我选择算法和数据结构中的经典书籍《算法导论》作为主要参考书目来深入学习算法和数据结构的内容。

      

    输入:n个数(a1,a2,a3...an) 输出:输入序列的一个排列(重新排序)a'1,a'2,a'3...a'n,使得a'1≥a'2≥a'3≥...≥a'n。

      引用《算法导论》书中的解释,插入排序算法可以比喻为我们平常整理扑克牌的情形。接到牌的时候,牌的顺序是杂乱的,我们将其一张一张整理好,最后呈现的就是从小到大的顺序。回顾我们整理扑克牌的过程,从杂乱的牌堆中一张一张抽取扑克牌,放入手中,并且放入适合的位置,直到所有的扑克牌都整理完毕。

      由此得到插入排序算法的伪代码如下:

    for j : 1 to length[A]-1 do key = A[j] i = j - 1 while i > 0 and A[i] > key do A[i + 1] = A[i] i = i - 1 A[i + 1] = key

    对于实例A[5, 2, 4, 6, 1, 3]C++实现插入排序。

    #include int main(void) { int A[6]={5, 2, 4, 6, 1, 3}; int key = 0; int i = 0; for (int j = 1; j < 6; j++) { key = A[j]; i = j - 1; while (i >= 0 && A[i] > key) { A[i + 1] = A[i]; i--; } A[i + 1] = key; } for (int i = 0; i < 6; i++) std::cout << A[i] << " "; return 0; }

      书中练习2.2-2中提到了选择排序,再次比喻为整理扑克牌情形,从牌堆中寻找最小的那张牌依次放入手中,最后得到的就是有序的牌。

      选择排序的伪代码如下:

    for j : 0 to length[A] - 1 do key = A[j] i : j+1 to length[A]-1 if A[i] < key A[i] <->key C++实现某一示例无序数组。

    #include int main(void) { int A[6]={5, 2, 1, 3, 6, 4}; int key = 0; int keyid = 0; int i = 0; for (int j = 0; j < 6; j++) { key = A[j]; for (i = j + 1; i < 6; i++) { if (A[i] < key) { key = A[i]; keyid = i; } } A[keyid] = A[j]; A[j] = key; } for (i = 0; i < 6; i++) std::cout << A[i] << " "; return 0; }

    这两种排序算法不适用于比较庞大的数据。

    转载请注明原文地址: https://ju.6miu.com/read-678893.html

    最新回复(0)