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;否则输出操作序列,每两个操作之间用空格隔开。

参考技术A 直接学习C语言,不先学会Pascal
如果你要进行编程工作,你可以直接开始学习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)题目网上有的主要内容,如果未能解决你的问题,请参考以下文章

C语言中一个小的除一个大的是否零?

C语言问题!

c语言中从文件中按行读取字符串,并进行相应操作。

c语言对链表的数据排序的问题,分不是问题!

C语言数组排序问题

C语言输出字体的颜色怎么改变