排序
unshaven111
这个作者很懒,什么都没留下…
展开
-
快速排序
选左侧第一个数为基准数,从右侧开始找一个比基准数小的数,从左侧开始找一个比其大的数,二者调换,再接着找,直到两向相遇,则将相遇点的数据与基准数调换;接着对基准数两侧的数据进行与上述相同的操作,进行递归处理。 void fastSort(vector<int>& nums,int left,int right){ if(left>=right) re...原创 2018-10-30 20:38:51 · 94 阅读 · 0 评论 -
堆排序
堆排序是将整个数组用完全二叉树的形式存,即如果根节点的下标是0,那么左子树的下标2i+1,右子树的下标是2i+2第一次先生成一个大顶堆或者小顶堆,然后把根节点与最后一个节点交换,这样就相当于在数组最后变成了最大或者最小的值,然后再遍历从n-1到1,之所以不用遍历0,因为0是根节点,已经变成有序.时间复杂度:一.初始化建堆 初始化建堆只需要对二叉树的非叶子节点调用adjusthead()...原创 2018-11-07 17:09:28 · 649 阅读 · 0 评论 -
桶排序
时间复杂度因为时间复杂度度考虑的是最坏的情况,所以桶排序的时间复杂度可以这样去看(只看主要耗时部分,而且常熟部分K一般都省去)N次循环,每一个数据装入桶然后M次循环,每一个桶中的数据进行排序(每一个桶中有N/M个数据),假设为使用比较先进的排序算法进行排序一般较为先进的排序算法时间复杂度是O(N*logN),实际的桶排序执行过程中,桶中数据是以链表形式插入的,那么整个桶排序的时间复杂度为:...原创 2019-01-04 15:53:05 · 428 阅读 · 0 评论 -
归并排序
一种是由上到下#include <iostream>;using namespace std;void merge(int a[], int start, int mid, int end,int temp[]){ int i = start; int j = mid + 1; int k = 0; while (i <= mid && j <...原创 2019-01-07 14:12:10 · 92 阅读 · 0 评论 -
排序
1.有大量重复元素: 三路快排2.近乎有序:插入排序3.取值有限“:计数排序4.稳定:归并排序5.链表:归并6.数据量很大,或者内存很小,不足以装在在内存里,使用外排序算法...原创 2019-01-16 22:39:52 · 138 阅读 · 0 评论