排序
牧童遥指杏花村丫
这个作者很懒,什么都没留下…
展开
-
简单选择排序
简单选择排序 简单选择排序算法思想:在待排序数组中选出最小的(或最大)的与第一个位置的数据交换 然后在剩下的 待排序数组中找出最小(或最大)的与第二个位置的数据交换,以此类推,直到第n-1个元素。 1、时间复杂度:O(n^2) 2、空间复杂度:O(1) 3、稳定程度:不稳定 代码示例: #include /*简单选择排序:在待排序数组中原创 2017-11-09 10:43:51 · 195 阅读 · 0 评论 -
堆排序
堆排序 1、堆分为: (1)大根堆:(父总是大于子)整个堆中,左子树的数据和右子树的数据都比父结点的数据小。 (2)小根堆:(父总是小于子)整个堆中,左子树的数据和右子树的数据都比父结点的数据大。 2、给出父结点n求孩子结点 左子树:2*n+1 右子树:2*(n+1) 3、给出孩子结点n求父结点 (n-1)/2 4、时间复杂度:O(nlog原创 2017-11-09 11:31:22 · 218 阅读 · 0 评论 -
直接插入排序
直接插入排序算法 直接插入排序的基本思想是:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,....,第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。 #原创 2017-11-02 13:17:11 · 220 阅读 · 0 评论 -
希尔排序
希尔排序的基本思想: 先取一个小于n的整数d1作为第一个增量,把全部数据记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2 =1( < … 该方法实质上是一种分组插入方法 比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比 较就可能消除多个元素交换。算法先将要排序的一组数按某个增量d原创 2017-11-04 19:16:54 · 188 阅读 · 0 评论 -
冒泡排序
冒泡排序 算法思想: (1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。 (2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 (3)针对所有的元素重复以上的步骤,除了最后一个。 (4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 代码实现: #include原创 2017-11-15 09:19:14 · 161 阅读 · 0 评论 -
归并排序
归并排序 归并排序(MergeSort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 算法描述: 归并操作的工作原理如下: 第一步:申请空间,使其大小为两个已经排序序原创 2017-11-22 09:17:35 · 316 阅读 · 0 评论 -
基数排序
基数排序 1、基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort),它是通过每个数的各个位数,将要排序的元素分配至某些“桶”中,以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数。 2、基本过程 第一步 假设原来有一串数值如原创 2017-11-23 11:17:19 · 252 阅读 · 0 评论 -
快速排序
代码实现: #include <iostream> using namespace std; //快速排序 void QuickSort(int *arr, int len, int left, int right) { int i, j, t, tmp; if (left > right) { return; } tmp = arr[left]; i = ...原创 2018-08-19 19:35:44 · 218 阅读 · 0 评论