第一题:希尔排序(shell)
希尔排序(shell)又称作“缩小增量排序”。其基本思想是:把记录按下标的一定增量分组,对每组记录使用直接插入排序。随着增量逐渐减小,所分成的组包含的记录越来越多,到增量的值减到1时,整个数据集合成为一组,完成排序。
在希尔排序中,不是简单地逐段分割来分组记录,而是将相隔某个“增量”的记录组成一组,构成一个子序列。当在组内进行直接插入排序时,记录的移动将是按“增量”值的倍数大幅度移动,比一步一步的挪动要高效得多。
基本过程: 首先选定一个严格递减序列 d1,d2, ... ,dt= 1
⑴ 比较以d1为距离的项,直到以d1为距离的记录排好序为止;
⑵ 从上述的结果序列出发,继续以 d2(d2<d1) 为距离的项进行排序;
⑶ 依次取每一个 di+1(di+1<di),重复⑵直到 dt = 1为止。
要求:
选取增量序列为:d0=n; di+1=[di/2]
从键盘输入10个整数
在屏幕上输出每一趟希尔排序的结果
例如:
input : 23 15 34 19 16 24 99 88 17 30
step 1: 23 15 34 17 16 24 99 88 19 30
step 2: 16 15 19 17 23 24 34 30 99 88
step 3: 15 16 17 19 23 24 30 34 88 99
第二题:N皇后问题
在n皇后问题中,我们希望在n×n的棋盘上找到一个n皇后的放置方法以便任意两个皇后之间不冲突。当且仅当两个皇后在相同的排、列、对角线或反对角线上时,她们之间将发生冲突。(数据结构不限,i,j在对角线或反对角线上时i+j=Cij;i-j+C=Aij;其中Cij和Aij为依赖与i,j的非负常数;通常采用回溯算法)。
要求:
只要求对8皇后问题求解
没有输入,在解决问题的前提下,尽可能考率时间和空间复杂性
在屏幕上输出8皇后问题的位置(放皇后为1,没放为0)
例如:输出格式为(注意例子中的结果并不对)
1 2 3 4 5 6 7 8
1 : 1 0 0 0 0 0 0 0
2 : 0 0 1 0 0 0 0 0
3 : 0 1 0 0 0 0 0 0
4 : 0 0 0 1 0 0 0 0
5 : 0 0 0 0 0 1 0 0
6 : 0 0 0 0 0 0 0 1
7 : 0 0 0 0 0 0 1 0
8 : 0 0 0 0 1 0 0 0
--------------------------------------------------------------------