算法
nicholas_dfx
南京--电子工程师、软件工程师、控制工程师,物联网,工控,工业互联,嵌入式
展开
-
排序算法之归并排序
归并排序的思路很简单,归并排序包括两个步骤,分别为: 第一,分解:分解待排序的n个元素的序列成各具n/2个元素的子序列; 第二,合并:合并两个已排序的子序列——这是核心部分! 递归版原理如下: 1. 将序列每相邻两个数字进行归并操作,形成floor(n/2)个序列,排序后每个序列包含两个元素 2. 将上述序列再次归并,形成floor(n/4)个序列,每个序列包含四个元素 3. 重复步骤2,直到所有...原创 2019-03-01 11:05:01 · 3070 阅读 · 0 评论 -
排序算法之堆排序
堆排序使用大顶堆,大顶堆的第一个元素是最大值,这样在排序的时候(假设共n个节点),直接将第一个元素和最后一个元素进行交换,然后从第一个元素开始进行向下调整至第n-1个元素。堆排序的步骤分为三步: 1、建堆(建大堆) 2、交换数据 3、向下调整 /******************* 堆排序 ***********************/ template<class T>...原创 2019-02-28 15:49:55 · 3088 阅读 · 0 评论 -
排序算法之希尔排序
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 简单插入排序很循规蹈矩,不管数组分布是怎么样的,依然一步一步的对元素进行比较,移动,插入,比如[5,4,3,2,1,0]这种倒序序列,数组末端的0要回到首位置很是费劲,比较和移动元素均需n-1次。而希尔排序在数组中采用跳跃式分组的策略...原创 2019-02-28 14:52:06 · 3036 阅读 · 0 评论 -
排序算法之直接插入排序
1 核心思想:插入排序通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入 ,如此重复,直至完成序列排序。 2 算法分析: 1. 从序列第一个元素开始,该元素可以认为已经被排序 2. 取出下一个元素,设为待插入元素,在已经排序的元素序列中从后向前扫描,如果该元素(已排序)大于待插入元素,将该元素移到下一位置。 3. 重复步骤2,直到找到已排序的元素小于或者等于待排序元...原创 2019-02-28 14:50:09 · 3028 阅读 · 0 评论 -
排序算法之简单选择排序
在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止 /************* 选择法排序 **************/ template<class T> void selectsort(T arr[],int len...原创 2019-02-28 14:48:51 · 3088 阅读 · 0 评论 -
排序算法之冒泡排序
算法思想: 从数组头部开始,不断比较相邻的两个元素的大小,让较大的元素逐渐往后移动(交换两个元素的值),直到数组的末尾。经过第一轮的比较,就可以找到最大的元素,并将它移动到最后一个位置。第一轮结束后,继续第二轮。仍然从数组头部开始比较,让较大的元素逐渐往后移动,直到数组的倒数第二个元素为止。经过第二轮的比较,就可以找到次大的元素,并将它放到倒数第二个位置。以此类推,进行 n-1(n 为数组长度)...原创 2019-02-28 14:47:47 · 3133 阅读 · 0 评论 -
排序算法之快速排序
快速排序算法是一种基于交换的高效的排序算法,它采用了分治法的思想: 1、从数列中取出一个数作为基准数(枢轴,pivot)。 2、将数组进行划分(partition),将比基准数大的元素都移至枢轴右边,将小于等于基准数的元素都移至枢轴左边。 3、再对左右的子区间重复第二步的划分操作,直至每个子区间只有一个元素 /****************** 快速排序 *****************...原创 2019-02-28 14:46:18 · 3068 阅读 · 0 评论