
算法
灬Sunnnnn
承接各种定制开发,Qt、音视频、流媒体、客户端、服务端,需要的私聊。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
五大算法设计思想
分治法 概念: 将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 思想策略: 对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。 特征: 1) 该问题的规模缩小到一定的程度就可以容易地解决 2) ...转载 2020-03-29 22:43:25 · 585 阅读 · 0 评论 -
排序算法-归并排序
1.归并排序 1)分解:将已有的子序列采用递归的方式进行折半拆分,直到分组后只有一个元素。 2)合并:将划分后的序列进行两两排序合并。 2.图解 3.算法 /*合并Array[low, mid)和Array[mid, high) 合并前应保证Array[low, mid)和Array[mid, high)中的元素都是有序的*/ void merge(int* A...原创 2019-11-26 21:58:38 · 171 阅读 · 0 评论 -
排序算法-快速排序
1.快速排序 基本思想:挖坑填数+分治法 1)从序列中选择一个基准数(这里选择序列中第一个数为基准数) 2)将序列中的所有数依次遍历,比基准数大的位于其右侧,比基准数小的位于其左侧 3)重复步骤1、2,直到所有子集中只有一个元素为止 2.图例 3.算法 //快速排序,哨兵i和j void quickSort(int arr[], int i, int j) { ...原创 2019-11-25 22:42:00 · 150 阅读 · 0 评论 -
排序算法-冒泡排序
1.冒泡排序 1)将序列中的进行左右比较,保证右边的元素始终大于左边的元素(第一轮结束后,序列中最后一个元素一定是当前序列的最大值) 2)对序列中的剩下的n-1个元素再执行步骤1 2.图例 3.算法 //冒泡排序 void bubbleSort(int arr[], int len) { for (int i = 0; i < len - 1; i++) ...原创 2019-11-25 21:27:36 · 205 阅读 · 0 评论 -
排序算法-堆排序
1.堆排序 1)首先将序列构建为大顶堆 ; 2)取出当前大顶堆的根结点,将其与序列末尾元素进行交换(此时末尾元素为已排序序列的最大值); 3)对交换后的n-1个序列元素进行调整,使其满足大顶堆的性质; 4)重复2、3步骤,直到堆中只有一个元素位置 2.数据结构-堆 详见数据结构-堆 3.算法 //递归方式构建堆,parent为第一个非叶子结点下标,num为数组个数 ...原创 2019-11-17 13:33:00 · 161 阅读 · 0 评论 -
排序算法-简单选择排序
1.简单选择排序 从待排序的序列中,找到关键字最小的元素;如果最小元素不是待排序列的第一个元素,将其和第一个元素互换;然后从余下的N-1个元素中,找出关键字最小的元素,重复以上步骤。 1)1层循环:依次遍历序列中的每个元素; 2)2层循环:将遍历得到的当前元素依次与余下的元素进行比较,符合最小元素的条件,则交换。 2.图例 红色字体表示位置发生变化的两个元素。 3.算法...原创 2019-11-17 12:26:37 · 211 阅读 · 0 评论 -
排序算法-希尔排序
1.希尔排序 将待排序数组按照步长进行分组,然后将每组的元素利用直接插入排序的方法进行排序,每次将步长折半减小,gap=1时,利用直接插入完成排序。 1)第一层循环将gap依次折半,对序列进行分组直到gap=1; 2)第二、三层循环利用直接插入排序的两次循环 2.图例 3.算法 //希尔排序 void shellSort(int *arr, int num) ...原创 2019-11-17 11:58:07 · 184 阅读 · 0 评论 -
排序算法-直接插入排序
1.直接插入排序 将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已经排序的元素小,则交换,直到全部元素都比较过。 1)第一层循环,遍历待比较的所有数组元素; 2)第二层循环,将本轮选择的元素与已经排好序的元素相比较; 2.图例 3.算法 //直接插入排序 //参数1:数组 //参数2:元素个数 void insertSort(int *arr,...原创 2019-11-17 10:53:17 · 429 阅读 · 0 评论