c语言双栈排序代码(我要的是c语言的不是PASCAL)题目网上有
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言双栈排序代码(我要的是c语言的不是PASCAL)题目网上有相关的知识,希望对你有一定的参考价值。
【问题描述】
Tom最近在研究一个有趣的排序问题。如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序。
操作a:如果输入序列不为空,将第一个元素压入栈S1
操作b:如果栈S1不为空,将S1栈顶元素弹出至输出序列
操作c: 如果输入序列不为空,将第一个元素压入栈S2
操作d:如果栈S2不为空,将S2栈顶元素弹出至输出序列
如果一个1~n的排列P可以通过一系列操作使得输出序列为1,2,…,(n-1),n,Tom就称P是一个“可双栈排序排列”。例如(1,3,2,4)就是一个“可双栈排序序列”,而(2,3,4,1)不是。下图描述了一个将(1,3,2,4)排序的操作序列:<a,c,c,b,a,d,d,b>
【要求】:输入:
第一行是一个整数n。
第二行有n个用空格隔开的正整数,构成一个1~n的排列。
输出:
输出一行,如果输入的排列不是“可双栈排序排列”,输出数字0;否则输出操作序列,每两个操作之间用空格隔开。
如果你要进行编程工作,你可以直接开始学习C + +的,这是我曾经看到过一篇文章说的很详细:
> ==================================
有的学生问我如何学习C + +的I有没有别的办法给你,唯一的办法是阅读,阅读
大量的书籍可以解决。使C + +作为日常语言,而不是一种编程语言,因此更容易处理。
有人要问我,那么我应该读什么书去了?没有时间怎么办?
我只能对你说,没有时间,那么你不学习C + +,和你喜欢做的事。生活无
C + +的,也是美丽的。
如果你已经准备好学习,就要学习,然后我打开一本书,它不应该即使是大问题。
首先一定要阅读的C + +
理解这个语言的历史。然后,你可以看看其他的书,但必须继续回头看这本书,看到
你不断地学习新技术是一个有点像被接纳到这个语言中去。
第一本书各不相同,一些良好的基础,你可以看到斯坦利B.李普曼的C + +入门,这本书很
巨大的一部分,你可以玩一个星号别看。基础不好,你可以看到斯坦利B.
李普曼的基本的C + +,这本书是重量轻得多,而是四个C + +的范式说话,一边
而且说得很清楚。
事物的第二次技术方面应该停下来,停下来看看Kernighan和派克的编程实践
,一个好人,在方案设计中应注意哪些事项。这
非常薄的小册子,可以说是程序员必读指南。
第三本书,它应该被写入由Bruce Eckel的,指定思维在C + +,这本书太每半年我会再次重读它。每章都写得很好,发人深省地说,这本书让我用非常高的水平感到
技术,但语言是很平淡,只是认真阅读,即使基础不行,
也就能理解了。我教课,我用这本书(学生面对从零开始)。
到一个新的水平,那么我们就慢了一步,首先掌握了C + +设计良好的生活习惯。这是斯科特
迈尔斯的有效的C + +和更有效的C + +为我们提供了无尽的好处。我更
有效的C + +都买不起,花了10块钱一个结合“线装,”看起来像一个向日葵
系列(;-))的副本。这两本书是真正的经典之作,作者的熟练的C + +,使得语言风格是简单地读取
甜果冻,当他在演讲相反。我在原来的CD手中的两本书,如果有兴趣
感兴趣的话,可以发E-mail给sjtu@263.net或饮水思源铸孩子到高博问,只要你提供给我 BR /> CD给免费的刻录。如果你有一个深刻的认识了有效的C + +和更有效的
C + +,那么你会发现,你已经在起重机的人群羊群。可以指导该项目的运作,你可以编辑
写入要编程的一切,你可以指出其他人的代码看起来不错的大小问题。如果你能看到有人
对应于“第27条”或“条款M6”代码,那么你真的可以让自己刮目了。
我已经说过,如果写的过程中,EC + +和MEC + +的境界,使你舒适,足以应付,但随着
如果您有任何不满意,并希望集中对一些理论问题,或者想看看代码来实现的,你不应该错过这个
几个非常不错的书籍。我说香草萨特的特殊C + +和更多
特殊的C + +,这些书的难度是非常大的,而且我读的每一个十几票据为
页面。尤其是泛型编程的一部分,这些书内容翔实,非常深入之能事,常常
明白了一,两个磨憨曾经伟大的酣畅淋漓感;有侯捷的STL源码剖析实际
例子来解释像STL的一点点是怎么实现的,我刚开始读,不发表意见;而
1斯坦利B.李普曼,Cfront时实施者,执笔写了里面的C + +对象
模型,我只有一个字,那基本上是真棒。我了解编译器的源代码
演绎的无数细节,以及记忆体分配的细节,呵呵,他们知道,我有什么可怕的呢?
最近得到了另一个Cfront时实施者,C + +标准委员会科尼格的C + +沉思录,看起来很不错,它
它推荐给大家,但我也没看完,也不说了。
终于,终于,你,下一个C + +的理论家,但一定要记住,Bjarne的Stroustrup的C + +的
编程语言也应该阅读在任何情况下的四五倍!这是所有C + +书籍的来源。
如果这还不够,在C + +标准委员会下令C + +标准。
这本书的所有中国大陆作家,盖不看(包括我在内)。一切VC + +或讲特定
本书的编译器总是不看。如果你需要做的C语言课,买一个非常小的K&R是在C
编程语言就足够了,不要看别的书一概。不先学C,再学C + +,但采取直接
学习C + +。你不先学习经典,学习白话,对不对?所以请相信我,直接向更加容易。
文字,都是原创,我愿意为每一个字负责。
================================= p>这应该是一个计算机专业的教师或专家撰写的文章,终于有直接来自C + +的启动问题可能帮助
c语言实现哈希排序代码
哈希排序
希尔排序(Shell\'s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本
既然是插入排序法的改进版本
那什么是插入排序法?请看
c语言实现插入排序代码
那么,它是如何改进的呢?
假设有 [8, 7, 6, 5, 4, 3, 2, 1]
size = 8
那么把它对半分
CC= size / 2 = 4
也就是分成 [8, 7, 6, 5,] [4, 3, 2, 1]
然后根据条件比较
8<=>4
7<=>3
6<=>2
5<=>1
假设从小到大顺序
那么 CC=4 时的排序后变成
[4, 3, 2, 1, 8, 7, 6, 5]
接下来我们继续 CC = 4 / 2 = 2
也就是分成
[4, 3] [2, 1] [8, 7] [6, 5]
重复上边步骤
无交换时:[4, 3] [2, 1] [8, 7] [6, 5]
1次比较: [2, 3] [4, 1] [8, 7] [6, 5]
2次比较: [2, 1] [4, 3] [8, 7] [6, 5]
3次比较: [2, 1] [4, 3] [8, 7] [6, 5]
4次比较: [2, 1] [4, 3] [8, 7] [6, 5]
5次比较: [2, 1] [4, 3] [6, 7] [8, 5]
6次比较: [2, 1] [4, 3] [6, 5] [8, 7]
最终 CC=2 时,数组的顺序为
[2, 1, 4, 3, 6, 5, 8, 7]
最后一步 CC = 2 /2 = 1
数组变成:[2] [1] [4] [3] [6] [5] [8] [7]
再重复上边操作完成排序
[1, 2, 3, 4, 5, 6, 7, 8]
本次使用c语言实现
完整代码
#include <stdio.h>
// 打印数组
void print(int *buf, int size)
for (int i = 0; i < size; ++i)
printf("%d ", buf[i]);
printf("\\n");
// 插入排序数组
void sort_insert(int *buf, int s, int size)
for (int i = 0; i < size; ++i)
for (int j = i + s; j < size ; j += s)
if (buf[i] > buf[j])
int tmp = buf[i];
buf[i] = buf[j];
buf[j] = tmp;
// 希尔排序数组
void sort(int *buf, int size)
for (int i = size / 2; i > 0; i /= 2)
sort_insert(buf, i, size); // 每次分组后引用插入排序法
// 主函数
int main(int argc, char **argv)
int arr[] = 4,1,3,4,2,0,5,0 ; // 测试数组
int size = sizeof(arr) / sizeof(int); // 数组大小
print(arr, size); // 打印排序前数组
sort(arr, size); // 排序
print(arr, size); // 打印排序后数组
return 0;
调试结果
_End
本文来自博客园,作者:拾荒荒,转载请注明原文链接:https://www.cnblogs.com/lvvou/p/15702826.html
以上是关于c语言双栈排序代码(我要的是c语言的不是PASCAL)题目网上有的主要内容,如果未能解决你的问题,请参考以下文章