算法设计第二章总结

第二章是递归和分治策略,通过Hanoi塔问题、排列问题等学习递归的思想,通过二分搜索算法、大整数乘法等学习了分治法的思想,并学习了归并排序和快速排序两种排序方法。PTA上的问题一是找第k小的数,用到了快速排序的方法对数组进行排序,同时在寻找第k小的数时递归调用int find(int a[],int left,int right,int k)函数,从而找出k。写代码过程中遇到的问题是在main函数中left与right赋值出错,导致程序运行程序超时错误及段错误,改正后程序可正常运行。问题二是求逆序对数目。题目问题是:对给定序列进行排序的相邻数字的最小交换次数是多少?一开始看到这个问题是感觉无法下手,不知道最小交换次数应如何求解。后来通过网上百度,了解了求最小交换次数实际上就是求给定序列的逆序对数目。弄清楚问题后,使用归并排序的方法对数组进行排序,同时求出逆序对的数目并输出。

原文地址:https://www.cnblogs.com/xjsunshine/p/9748321.html

时间: 2024-07-31 07:57:20

算法设计第二章总结的相关文章

算法导论 第二章

2014-12-02 20:21:40 http://www.cnblogs.com/sungoshawk/p/3617652.html 上面链接指向算法导论第二章的预习博客,很值得一看,很详细. 插入算法: 1 #include <iostream> 2 3 using namespace std; 4 void insert_sort(int *datas, int length); 5 int main() 6 { 7 int a[10]={1,2,4,35,6,1,4,7,9,7};

算法导论 第二章作业

//作业2. 1-2 template<class T> void insert(T* A, int  n) { for (int j = 1; j < n; ++j) { T key = A[j]; int i = j - 1; while (i >= 0 && key > A[i]) { A[i + 1] = A[i]; --i; } A[i + 1] = key; } } //2. 1-3 template<class T> void fin

Java数据结构与算法(第二章数组)

数组是应用最广泛的数据存储结构.它被植入到大部分编程语言中. Java中数组的基础知识     创建数组 在Java中把它们当作对象来对待,因此在创建数组是必须使用new操作符:     int[] intArray;            //defines a reference to an array     ingArray = new int[100];    //creates the array, and                                  //set

【算法导论第二章】算法基础

2.1插入排序 扑克牌这个栗子不错.以后得多用扑克牌来形象化思考排序问题. 根据伪代码用java实现插入排序 package com.panjn.java; /** * Created by panjianning on 2016/7/10. */ public class InsertionSort { public static void main(String[] args) { int[] array = new int[]{1, 3, 5, 7, 9, 2, 4, 6, 8, 10};

Python算法教程第二章知识点:计时模块、字典与散哈希表、图与树的实现、成员查询、插入对象

本文目录:一.计时模块:二.字典与散哈希表:三.图与树的实现:四.成员查询:五.插入对象</br>一.计时模块(timeit.cProfile) import timeit timeit.timeit('x = 1 + 2') 既然学习算法,那么来计算程序所耗费的时间是重要的,但是需要注意:timeit()计时函数会多次运行相关的代码段并求得平均值,以提高计时的精准度,所以,我们需要预防早先的执行操作影响之后代码的执行.举个栗子:若我们执行排序算法,则只有第一次执行代码时是在随机的情况下计时,

算法导论第二章C++实现归并算法排序

归并算法排序的思想算法导论中讲的还算比较清楚. #include<iostream> using namespace std; void guibing(int *_array,int p,int q,int r); void merge_sort(int *_array,int p,int r); int main() { int a[8]={2,4,5,7,1,2,3,6}; int j1=0; int j2=7; merge_sort(a,j1,j2); int i=0; for(;i&

算法导论第二章

插入排序源码: 1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 void insert_sort(int a[]) 7 { 8 for(int j=1;j<10;j++) 9 { 10 int key=a[j]; 11 int i=j-1; 12 while(i>=0 && a[i]>key) 13 { 14 a[i+1]=a[i]; 15 i--; 16

算法导论--第二章、插入排序

1. 插入排序类似于整理扑克牌(排列好顺序的扑克和待排序的扑克): 2. 插入排序(INSERTION-SORT)参数是一个数组A[1..n]共n个数,输入的各个数字原地排序(sorted in place),分为排好序的和待排序的,每次取一个待排序元素,找到插入的位置,插入已排好序的部分中.元素取完程序结束,复杂度为O(n^2): 3. 伪代码如下: INSERTION-SORT(A) for j <- 2 to length(A) do key <- A[j] //Insert A[j]

《数据结构与算法》第二章 线性表

线性表 定义: 由n个特性相同 数据元素(即可有很多数据项)构成的有限序列,同时相邻数据元素之间存在 序偶 关系. 线性表中元素个数就是 表长 . 特点: ·存在唯一一个被称为 “第一个” 的数据元素(线性起点.起始结点): ·存在唯一一个被称为 “最后一个” 的数据元素(线性终点.终端结点): ·除第一个以外,结构中的每个数据元素均 只有一个前驱 : ·除最后一个外,结构中的每个数据元素均 只有一个后继 . 顺序表示和实现 线性表的顺序表示指的是用一组地址连续的存储单元一次存储线性表的数据元素