阅读下列函数说明和C代码,回答下面问题。
[说明]
冒泡排序算法的基本思想是:对于无序序列(假设扫描方向为从前向后,进行升序排列),两两比较相邻数据,若反序则交换,直到没有反序为止。一般情况下,整个冒泡排序需要进行众(1≤k≤n)趟冒泡操作,冒泡排序的结束条件是在某一趟排序过程中没有进行数据交换。若数据初态为正序时,只需1趟扫描,而数据初态为反序时,需进行n-1趟扫描。在冒泡排序中,一趟扫描有可能无数据交换,也有可能有一次或多次数据交换,在传统的冒泡排序算法及近年的一些改进的算法中[2,3],只记录一趟扫描有无数据交换的信息,对数据交换发生的位置信息则不予处理。为了充分利用这一信息,可以在一趟全局扫描中,对每一反序数据对进行局部冒泡排序处理,称之为局部冒泡排序。
局部冒泡排序的基本思想是:对于N个待排序数据组成的序列,在一趟从前向后扫描待排数据序列时,两两比较相邻数据,若反序则对后一个数据作一趟前向的局部冒泡排序,即用冒泡的排序方法把反序对的后一个数据向前排到适合的位置。扫描第—对数据对,若反序,对第2个数据向前冒泡,使前两个数据成为,有序序列;扫描第二对数据对,若反序,对第3个数据向前冒泡,使得前3个数据变成有序序列;……;扫描第i对数据对时,其前i个数据已成有序序列,若第i对数据对反序,则对第i+1个数据向前冒泡,使前i+1个数据成有序序列;……;依次类推,直至处理完第n-1对数据对。当扫描完第n-1对数据对后,N个待排序数据已成了有序序列,此时排序算法结束。该算法只对待排序列作局部的冒泡处理,局部冒泡算法的
名称由此得来。
以下为C语言设计的实现局部冒泡排序策略的算法,根据说明及算法代码回答问题1和问题2。
[变量说明]
define N=100 //排序的数据量
typedef struct{ //排序结点
int key;
info datatype;
......
}node;
node SortData[N]; //待排序的数据组
node类型为待排序的记录(或称结点)。数组SortData[]为待排序记录的全体称为一个文件。key是作为排序依据的字段,称为排序码。datatype是与具体问题有关的数据类型。下面是用C语言实现的排序函数,参数R[]为待排序数组,n是待排序数组的维数,Finish为完成标志。
[算法代码]
void Part-BubbleSort (node R[], int n)
{
int=0 ; //定义向前局部冒泡排序的循环变量
//暂时结点,存放交换数据
node tempnode;
for (int i=0;i<n-1;i++) ;
if (R[i].key>R[i+1].key)
{
(1)
while ((2) )
{
tempnode=R[j] ;
(3)
R[j-1]=tempnode ;
Finish=false ;
(4)
} // end while
} // end if
} // end for
} // end function
阅读下列函数说明和C代码,将应填入(n)处的字句写在的对应栏内。
●Shell排序、快速排序、堆排序的稳定性如何? (23) 。
若要尽可能的完成对实数数组的排序,且要求排序是稳定的,则应选 (24) 。
若用插入排序算法对n个记录进行排序,最佳情况下,对关键字进行的比较次数为 (25) 。
对于多关键字而言, (26) 是一种方便而又高效的文件组织方式。
若用冒泡排序对关键字序列{19,16,11,8,5,3}从小到大进行排序,则需要次数为 (27) 。
(23) A.Shell排序是稳定的
B.快速排序是稳定的
C.堆排序是稳定的
D.都不稳定
(24) A.快速排序
B.堆排序
C.归并排序
D.基数排序
(25) A.N2-1
B.N-1
C.N2
D.N+1
(26) A.顺序文件
B.索引文件
C.散列文件
D.倒排文件
(27) A.3
B.6
C.15
D.12
(41)
A. 4, 8,45, 23,67,12, 19,7
B. 4,7,8,12,23, 45,67,19
C. 4,12,8,19,7,23, 45,67
D. 4,12,23,45,67,8,19,7
若原始数据序列(23,4,45,67,12,8,19,7)采用直接插入排序法(顺序地将每个元素插入到它之前的适当位置)排序,则进行完第4趟后的排序结果是______。
A.4,8,45,23,67,12,19,7
B.4,7,8,12,23,45,67,19
C.4,12,8,19,7,23,45,67
D.4,12,23,45,67,8,19,7
若排序前后关键字相同的两个元素相对位置不变,则称该排序方法是稳定的。下列排序算法中,有(14)种排序算法是稳定的:归并排序、快速排序、希尔排序、堆排序、基数排序、直接插入排序、冒泡排序、直接选择排序。
A.3
B.4
C.5
D.6
A.按排序码值从小到大排列
B.按排序码值从大到小排列
C.随机排列(完全无序)
D.基本按排序码值升序排列
A.快速排序算法是不稳定的排序算法
B.快速排序算法在最坏情况下的时间复杂度为0(nlgn)
C.快速排序算法是一种分治算法
D.当输入数据基本有序时,快速排序算法具有最坏情况下的时间复杂度