![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序
wangsimiao118
这个作者很懒,什么都没留下…
展开
-
数据结构实验之排序五:归并求逆序数
这道题的算法思想就是将数组中的元素分成单独的序列,即每个元素都是一个序列,然后比较它们的大小,对它们进行归并排序,并统计其中的逆序数即可代码如下:#include#includeint temp[100001],elem[100001];//这里定义了一个暂时储存的数组,和一个输入数组、long long sum;void merger(int low,int mid,in转载 2016-08-20 11:12:40 · 743 阅读 · 0 评论 -
数据结构实验之排序六:希尔排序
这道题主要是采用希尔排序的方法,将相距某个增量的记录组成一个子序列,才能保证在子序列内分别进行直接插入排序后得到的结果是基本有序而不是局部有序。代码如下:#include void ShellSort(int a[],int dk,int length){/*希尔排序函数*/ int i,j,k; for(i=dk+1;i if(a[i]原创 2016-08-19 21:41:23 · 579 阅读 · 0 评论 -
数据结构实验之排序四:寻找大富翁
由于这道题既要求时间,又要求内存,所以我们可以建造一个只含m个元素的小顶堆,剩下的n-m个元素与小顶堆的第一个元素比较,若大于小顶堆的根元素,就将其替换掉,然后将其重新调成小顶堆,重复上述过程,直至将n-m个元素比较完,此时原来的小顶堆就变成一个大顶堆。代码如下:#include int a[15];void HeapAdjust(int s,int m)//建立一个小顶堆。{原创 2016-08-19 19:41:26 · 494 阅读 · 0 评论 -
数据结构实验之排序三:bucket sort
这道题的关键在于如何把数据量较大的数组简化为数据量较小的数组,由于人的年龄在0到100之间,我们只需将大于100的均归到100即可,再引入一个标记数组看某些年龄段是否有人存在。代码如下:#include #include int old[5000001];int main(){ int n,i,j,vis[104],b[104]; scanf("%d",&n原创 2016-08-19 08:54:29 · 373 阅读 · 0 评论 -
数据结构实验之排序二:交换排序
这里要注意的是相等的元素不再交换,还有注意用两个数组,因为对一组数组用冒泡排完后他已经是有序的了,再用快速排序计算交换次数就不是原来的数据了(低级错误)。代码如下:#include int t;int a[1000],b[1000];void QuickSort(int low,int high){/*快排函数*/ if(low int p=Part原创 2016-08-18 19:54:25 · 416 阅读 · 0 评论 -
数据结构实验之排序七:选课名单
这道题的关键在于如何存储这些选课同学的名字,应该将相同课的同学的名字存在一个数组中,定义结构体是可以用string类,也可以用字符指针,只不过在使用字符数组时要注意字符串只能用函数来操作,比如赋值时,用strcpy()。代码如下:#include using namespace std;struct node{ int length; string elem[1原创 2016-08-18 15:45:00 · 1238 阅读 · 0 评论 -
数据结构实验之排序一:一趟快排
这道题是利用快排的一趟排序的思想,将比枢轴大的均放在它的右边,将比枢轴小的均放在它的左边。代码如下:#include int a[100000];int main(){ int n,i,j,p,d; while(scanf("%d",&n)!=EOF){ for(i=0;i scanf("%d",&a[i]);原创 2016-08-17 20:19:01 · 376 阅读 · 0 评论 -
找女朋友
这道题的算法思想就是快速排序:通过一趟排序将一组元素分割成独立的两部分,其中一部分的元素均比另一部分的元素小,则可分别对这两部分元素继续进行排序,使整个序列有序。代码如下:#include int a[1000000];void QuickSort(int low,int high){/*快速排序函数*/ int p; if(low p=Par原创 2016-08-17 19:57:13 · 294 阅读 · 0 评论 -
交叉排序
这道题主要是用冒泡排序的思想,分别对不同位置上的元素进行排序。代码如下:#include int main(){ int n,i,j,d; int a[110]; scanf("%d",&n); for(i=0;i scanf("%d",&a[i]); for(i=0;i for(j=i+2;j原创 2016-08-17 14:23:55 · 637 阅读 · 0 评论