排序
Cookie1997
什么都不会的小白
展开
-
输出前m大的数
#include<iostream>using namespace std;void swap(int &a,int &b){ int temp; temp=b; b=a; a=temp;}void arrangeRight(int Arr[],int s,int e,int k){ if(s >= e) { return; }...原创 2017-12-12 17:41:20 · 278 阅读 · 0 评论 -
排序算法之计数排序
计数排序,顾名思义,就是把要排序的元素都一一计数,某个数值如果总共有10个相同的,该元素对应的个数就记为10;总共有5个相同的,就记为5...在当待排序数组内有大量重复的数值并且这些数值较为集中时,使用计数排序就有很明显的优势了。计数排序的主要思想是,对N个数据集进行排序,每个数据值的范围固定在[0,k),而k远远小于N,创建了k个代表[0,k)中每个值ki的有序的盒子,每个盒子存储待排序数列中与...原创 2018-03-19 17:48:57 · 463 阅读 · 0 评论 -
排序算法之堆排序
堆排序是一种利用某种数据结构来管理算法执行中的信息的排序算法。堆的数据结构是一种数组对象,可以把它看成一棵完全二叉树。完全二叉树是种什么东西?学过数据结构的人都知道,完全二叉树是 除了树的最底下一层外,其余各层都是满的,而最底下的那一层,结点都必须集中在最左边的若干结点中 的二叉树。比如下图,左边是完全二叉树,右边的不是。堆分两种,大根堆和小根堆,大根堆要满足以下条件:如果这个堆是大根堆,那么...原创 2018-03-19 12:51:47 · 345 阅读 · 0 评论 -
选择排序和插入排序的区别
很多人在学排序算法时,都接触到选择排序法和插入排序法,然而很多人对这两个排序法,分别是怎样的,又有什么细微的区别,却不了解。选择排序原理:主要在选择上,每一次从无序队列中选择出最小值,然后将其放置在有序队列的末尾,然后在无序队列中将其删除。插入排序原理:默认第一个元素为有序,后面的逐个向有序中插入,特点就是不断的移动数据,一直到排出序列。...原创 2018-03-08 20:11:05 · 3020 阅读 · 0 评论 -
排序算法之堆排序
时间复杂度为O(NlogN)的排序算法有很多。其中归并算法虽然时间短,但是需要的内存空间很大,因为其不断递归调用自身;而快速排序算法虽然平均情况下所花费时间也很短,但是在极端情况下,其时间复杂度为O(N²)。而堆排序呢,则是综合了这两者的优点,去除了这两者的缺点,所需要的内存空间不大,而且不管在什么情况下,其时间复杂度都为O(NlogN)。而堆排序也是一种用到数据结构知识的排序算法,可见,数据结构原创 2018-01-18 01:39:36 · 155 阅读 · 0 评论 -
排序算法之快速排序
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。原创 2017-12-12 10:09:09 · 220 阅读 · 0 评论 -
排序算法之插入排序
插入排序原理很简单,讲一组数据分成两组,我分别将其称为有序组与待插入组。每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将该元素插到有序组当中。就这样,每次插入一个元素,有序组增加,待插入组减少。直到待插入组元素个数为0。当然,插入过程中涉及到了元素的移动。原创 2017-12-12 11:11:25 · 177 阅读 · 0 评论 -
排序算法之选择排序
第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。原创 2017-12-12 10:52:35 · 205 阅读 · 0 评论 -
排序算法之冒泡排序
冒泡排序算法是:重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。#includeusing namespace std;int main(){ int arr[]={11,4,7,8,43,2,56,23,8,1,3,9}; int size = sizeof(arr)原创 2017-12-12 10:23:51 · 239 阅读 · 0 评论 -
排序算法之归并排序
归并排序的思路是把一个乱序的数组,分成A,B两部分,对A这一部分数组排序,然后再对B着一部分数组排序,A和B这两部分数组拍完序之后,事情就比较好办了,一个一个遍历放进一个临时数组里,在把临时数组一一赋值给原数组原创 2017-12-12 09:06:46 · 267 阅读 · 0 评论 -
求逆序对的个数
#include<iostream>using namespace std;void MergeSortAndCount(int start,int end,int a[],int tmp[],int& count){ if(start>=end) { return; } int mid=(start+end)/2; MergeSortAndCo...原创 2017-12-12 17:42:11 · 1594 阅读 · 0 评论 -
排序算法之基数排序
如果我们要排序的数据具有多个关键字域,那就可以采用基数排序的方法了。基数排序的主要思想是:假如参加排序的元素最高具有d位,有的数没有d位那么多,则在其欠缺的高位补0,将元素先按最低位(设最右边的位为最低位)的值进行排序,然后按次低位进行排序......最后进行最高位的排序。基数排序如果想达到理想的目的,必须满足两个条件:对各位的排序算法必须是稳定的;每一趟排序的过程中,如果有的元素的位值相同,则它...原创 2018-03-19 18:43:21 · 484 阅读 · 0 评论