(完整word版)数据结构第八章排序_第1页
(完整word版)数据结构第八章排序_第2页
(完整word版)数据结构第八章排序_第3页
(完整word版)数据结构第八章排序_第4页
(完整word版)数据结构第八章排序_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第八章排序:习题习题一、选择题1在所有排序方法中,关键字比较的次数与记录的初始排列次序无关的是( ) 。A.希尔排序B.冒泡排序C.插入排序D.选择排序2设有1000 个无序的记录,希望用最快的速度挑选出其中前10 个最大的记录,最好选用 ( ) 排序法。A.冒泡排序B.快速排序 C.堆排序D.基数排序3在待排序的记录序列基本有序的前提下,效率最高的排序方法是( )。A.插入排序B.选择排序C.快速排序 D.归并排序4不稳定的排序方法是指在排序中,关键字值相等的不同记录的前后相对位置( )。A.保持不变B.保持相反C.不定 D.无关5内部排序是指在排序的整个过程中,全部数据都在计算机的( )中

2、完成的排序。A.内存储器 B.外存储器C.内存储器和外存储器D.寄存器6用冒泡排序的方法对n 个数据进行排序,第一趟共比较( )对记录。A.1B.2 C.n-l D.n7直接插入排序的方法是从第()个记录开始,插入前边适当位置的排序方法。A.1B.2C.3 D.n8用堆排序的方法对n 个数据进行排序,首先将A.1B.2 C.n-l9归并排序的方法对D.nn 个数据进行排序,首先将n 个记录分成()组。n 个记录分成()组,两两归并。A.1B.2 C.n-l D.n10直接插入排序的方法要求被排序的数据( )存储。D.二叉树A.必须是顺序B.必须是链表C.顺序或链表11冒泡排序的方法要求被排序的

3、数据( )存储。A.必须是顺序B.必须是链表C.顺序或链表D.二叉树12 快速排序的方法要求被排序的数据( )存储。A.必须是顺序B.必须是链表C.顺序或链表D.二叉树13 排序方法中,从未排序序列中依次取出记录与已排序序列(初始时为空)中的记录进行比较,将其放入已排序序列的正确位置上的方法,称为 ( )。A.希尔排序B.冒泡排序C.插入排序D.选择排序14 每次把待排序的记录划分为左、右两个子序列,其中左序列中记录的关键字均小于等于基准记录的关键字, 右序列中记录的关键字均大于基准记录的关键字, 则此排序方法 叫做 () 。A.堆排序B.快速排序C.冒泡排序 D. Shell排序15 排序方

4、法中,从未排序序列中挑选记录,并将其依次放入已排序序列(初始时为空)的一端的方法,称为 ( ) 。A.希尔排序B.归并排序C.插入排序D.选择排序16用某种排序方法对线性表(25, 84, 21 , 47, 15, 27, 68, 35, 20)进行排序时,记录序列的变化情况如下:(1) (25,84,21,47,15,27,68,35,40)(2) (20,15,21,25,47,27,68,35,84)(3) (15,20,21,25,35,27,47,68,84)(4) (15,20,21,25,27,35,47,68,84)则所采用的排序方法是( ) 。A.选择排序B.希尔排序C.归并

5、排序D.快速排序17一组记录的关键字为 (25, 50, 15, 35, 80, 85, 20, 40, 36, 70),其中含有5 个长度为 2 的有序表,用归并排序方法对该序列进行一趟归并后的结果为 ( )。A. (15,25,35,50,20,40,80,85,36,70)B. (15,25,35,50,80,20,85,40,70,36)C. (15,25,50,35,80,85,20,36,40,70)D. (15,25,35,50,80,20,36,40,70,85)18 n 个记录的直接插入排序所需记录关键码的最大比较次数为 ( )。A. nlog2n B. n2/2C.(n+2

6、)(n_1)2 D. n-l19 n 个记录的直接插入排序所需的记录最小移动次数为 ( ) 。A. 2(n-l) B. n2/2C. (n+3)(n-2)/2 D. 2n20 对以下关键字序列用快速排序法进行排序, ( )的情况排序最慢。A. 19,23,3,15,7,21,28B. 23,21,28,15,19,3,7C. 19,7,15,28,23,21,3D. 3,7,15,19,21,23,2821快速排序在( )情况下最不利于发挥其长处,在( )情况下最易发挥其长处。A. 被排序的数据量很大B.被排序的数据已基本有序C.被排序的数据完全无序D.被排序的数据中最大的值与最小值相差不大E

7、.要排序的数据中含有多个相同值22 一组记录的关键字为 (45 , 80, 55, 40 , 42, 85) ,则利用快速排序的方法,以第一个记录为基准得到一次划分结果是( )。A. (40,42,45,55,80,85).B. (42,40,45,80,55,85)C. (42,40,45,55,80,85)D. (42,40,45,85,55,80)23 对 n 个记录的线性表进行快速排序, 为减少算法的递归深度, 以下叙述正确的是( )。A. 每次分区后,先处理较短的部分B.每次分区后,先处理较长的部分C.与算法每次分区后的处理顺序无关D. 以上都不对24 直接插入排序和冒泡排序的平均时

8、间复杂度为 ( ) ,若初始数据有序(即正序),则时间复杂度为 ( )。A.0(n)B.0(log2n) C.0(nlog2n) D. O(n2)25 一组记录的关键字为 (45 , 80, 55, 40, 42, 85) ,则利用堆排序的方法建立的初始 堆为 ( )。A. (80,45,55,40,42,85)B. (85,80,55,40,42,45)C. (85,80,55,45,42,40)D. (85,55,80,42,45,40)26 下列序列中是堆的有( ) 。A. (12,70,33,65,24,56,48,92,86,33)B. (100,86,48,73,35,39,42,

9、57,66,21)C. (103,56,97,33,66,23,42,52,30,12)D. (5,56,20,23,40,38,29,61,35,76)27 设有1000 个无序的记录,希望用最快的速度挑选出前20 个最大的记录,最好选用 ( ) 算法。A.冒泡排序B.归并排序 C.堆排序D.基数排序28 下列排序算法中,( )算法会出现下面情况:在最后一趟结束之前,所有记录不在其最终的位置上。A.堆排序 B.冒泡排序 C.快速排序D.插入排序29 在含有n 个记录的小根堆(堆顶记录最小)中,关键字最大的记录可能存储在( )位置上。A. Ln/21 B. Ln/2J-2C.1 D. Ln/2

10、_1+330 已知数据表A 中每个记录距其最终位置不远,则采用 ( )算法最省时间。A.堆排序B.插入排序C.直接选择排序D.快速排序31 下列排序算法中,某一趟(轮)结束后未必能选出一个记录放在其最终位置上的是()。A.堆排序 B.冒泡排序C.直接插入排序D.快速排序32 已知待排序的n 个记录可分为n/k 个组,每个组包含 k 个记录,且任一组内的各记录均分别大于前一组内的所有记录并小于后一组内的所有记录, 若采用基于比较的排序, 其 时间下界应为 ( ) 。 A.O(nlog 2 n) B.0(nlog2 k) C.0 (klog2 n) D.0(k log 2 k)33 若要尽可能地完

11、成对实数数组的排序,且要求排序是稳定的,则应选( )。A.快速排序B.堆排序C.归并排序D.基数排序34 在含有n 个记录的大根堆(堆顶记录最大)中,关键字最小的记录可能存储在 ( )位置上。A. Ln/21 B. Ln/2_1-1C.1D. Ln/2_1+135 对任意的 7 个关键字迸行排序,至少要进行( )次关键字之间的两两比较。A 13B 14C 15D 16二、填空题36 排序是将一组任意排列的记录按 的值从小到大或从大到小重新排列成有序的序列。37 在排序前,关键字值相等的不同记录间的前后相对位置保持 的排序方法称为稳定的排序方法。38 在排序前,关键字值相等的不同记录间的前后相对

12、位置的排序方法称为不稳定的排序方法。39 外部排序是指在排序前被排序的全部数据都存储在计算机的 存储器中。40 写出一种不稳定的排序方法的名称。41 在直接插入排序的方法中,当需要将第f 个数据插入时,此时前i-l 个数据是 的。42 对一个基本有序的数据进行排序 排序方法运算次数最小。8在对一组记录(54 , 38, 96 , 23, 15, 72, 60, 45, 83)进行直接插入排序时,当把第 7 个记录 60 插入到有序表时,为寻找插入位置需比较次。9在利用快速排序方法对一组记录(54, 38, 96, 23, 15, 72, 60, 45, 83)进行快速排序时, 递归调用而使用的

13、栈所能达到最大深度为 , 共递归调用的次数为 , 其中第二次递归调用是对组进行快速排序。43 在堆排序、快速排序和归并排序中,若只从存储空间考虑,则应首先选取方法,其次选取 , 最后选取 方法;若只从排序结果的稳定性考虑,则应选取;若只从平均情况下排序最快考虑, 则应选取 ; 若只从最坏情况下排序最快并且要节省内存考虑,则应选取 方法。44 在堆排序和快速排序中,若原始记录接近正序或反序,则选用 ,若原始记录无序,则最好选用 。45 在考虑如何选择排序中,若初始数据基本正序,则选用 ;若初始数据基本反序,则选用 。46 对 n 个记录的序列进行冒泡排序时,最少的比较次数是。三、简答题47 已知

14、序列: 17 , 18, 60, 40, 7, 32, 73 , 65, 85 ),请给出采用冒泡排序法对该 序列作升序排序时每一趟的结果。2已知序列:503 ,87, 512, 61 ,908,170,897, 275,653, 462),请给出采用快速排序法对该序列作升序排序时每一趟的结果。3已知序列:503 ,87, 512, 61 ,908,170,897, 275,653, 462),请给出采用基数排序法对该序列作升序排序时的每一趟的结果。4已知序列:503 , 17, 512 , 908, 170, 897, 275, 653, 426, 154, 509, 612, 677, 7

15、65 , 703, 941 ),请给出采用希尔排序法 (Dl=8) 对该序列作升序排序时每一趟的结果。5已知序列:70 , 83, 100, 65, 10 , 32, 7, 9),请给出采用插入排序法对该序列作升序排序时每一趟的结果。6已知序列:10 , 18, 4, 3, 6, 12, 1 , 9, 18, 8),请给出采用希尔排序法对该序列作升序排序时每一趟的结果。四、算法设计题1编写一个对给定的环形双向链表进行简单插入排序的函数。2编写一个下沉式“冒泡”函数。3编写一个对给定环形双向链表进行简单选择排序的函数。4如果把堆定义成:一种拟满树且每个结点的值既小于左孩子又小于右孩子,请写一 函

16、数建立一个初始堆。5设计一个函数修改冒泡排序过程以实现双向冒泡排序。6 已知奇偶转换排序如下所述:第一趟对所有奇数的i ,将 ai 和 ai+l 进行比较,第二趟对所有偶数的i,将ai和ai+1进行比较,每次比较时若si>si+1,则将两者交换,以后重复上述两趟过程交换进行,直至整个数组有序。(1)试问排序结束的条件是什么?(2)编写结果实现上述排序过程的算法。7采用单链表作存储结构,编写一个采用选择排序方法进行升序排序的函数。8利用一维数组A 可以对 n 个整数进行排序。其中一种排序算法的处理思想是:将n个整数分别作为数组 A 的 n 个记录的值,每次(即第 i 次)从记录Ai-An

17、中挑选出最小的一个记录Ak(i wkwn),然后将An与Ai换位。这样反复n次完成排序。编写实现上 述算法的函数第八章 排序13.第 8 章排序一、选择题1.D2.C3.A4.C5.A6.C78.B9.D10.A11.B12.A13.C14.B15.D16.D17.A18.C19.A20.D21. B,C22.C23.A24. D,A25.C,A26.B27. B,D 28.C29.D30.D31.C32.B33.C34.D35.C二、填空题1关键字。2 不变。3不能保持。4外。5快速排序、希尔排序和堆排序。6 有序。7冒泡。8. 3 。9.24 (23, 38, 15)。10. 堆排序,快速

18、排序,归并排序,归并排序,快速排序,堆排序。归并排序,快速排序,堆排序。B11. 堆排序快速排序。 12. 插入排序选择排序。n-l 。三、简答题1采用冒泡排序法排序的各趟的结果如下:初始: 17, 18, 60, 40,7, 32, 73, 65, 85l 趟:17, 18, 40,7,32, 60, 65, 73, 852 趟:17, 18,7,32, 40, 60, 65, 73, 853趟: 17,7,18, 32, 40, 60, 65, 73, 854 趟:7, 17, 18, 32, 40, 60, 65, 73, 855 趟:7, 17, 18, 32, 40, 60, 65,

19、 73, 85第 5 趟无元素交换,则排序结束。2采用快速排序法排序的各趟的结果如下:初始: 503, 87, 512, 61, 908, 170, 897, 275, 653, 462l 趟: 462, 87, 275, 61,170 503 897, 908, 653, 5122 趟: 170,87,275,61 462,503 897,908,653,5123 趟: 61,87 170 275 462,503897,908,653,5124 趟:61 87170 275 462,503 897,908,653,5125 趟:61, 87,170 275462,503 897, 908,6

20、53, 5126 趟:61,87, 170, 275, 462, 503897, 908, 653,5127 趟:61,87,170, 275, 462,503 512, 653897 9088 趟:61,87,170, 275, 462,503, 512 653897 9089 趟:61,87,170, 275, 462,503, 512, 653,897 90810 趟: 61, 87, 170, 275, 462, 503, 512, 653, 897, 9083采用基数排序法排序的各趟结果如下:初始: 503 87 512 61 908 170 897 275 653 4621 趟(按

21、个位排序):170 61 512 462 503 653 275 87 8979082 趟(按十位排序):503 908 512 653 61 462 170 275 878973 趟(按百位排序):61 87 170 275 462 503 512 653 8979084. 采用希尔排序的各趟结果如下:初始: 503 17 512 908 170 897 275 653 426 154 509 612 677 765 703 941 趟 (D1=8): 426 17 509 612 170 765 275 94 503 154 512 908 677 897 703 6532 趟 (D2=4

22、): 170 17 275 94 426 154 509 612 503 765 512 653 677 897 703 9083 趟 (D3=2): 170 17 275 94 426 154 503 612 509 653 512 765 677 897 703 9084 趟 (D4=1): 17 94 154 170 275 426 503 509 512 612 653 677 703 765 897 9085 采用插入排序的各趟结果如下:初始: (70) 83 100 65 10 32 7, 9l 趟: (70 83) 100 65 10 32 7 92 趟:(7083100) 65

23、 1032 793 趟:(657083100) 1032 794 趟:(10657083 100)32 795 趟:(10326570 83 100) 796 趟: (7 10 32 65 70 83 100) 97 趟: (7 9 10 32 65 70 83 100)6 采用希尔排序的各趟结果如下:初始: 10 18 4 , 3, 6, 12 l , 9, 15 8for (i=0; i<10; i 十 +)insert (head i) ;return head;void output (pnode h) pnode p=h;p=p->rlink ;printf ( &quo

24、t;%d" p->data) ; while (p->rlink!=h) ;printf "nn") ;void sort_insert (pnode head)pnode pl p2 p3 p4;int temp;pl=head->rlink;while (pl->rlink ! =head) pl=pl->rlink;printf ("current plis %dn" pl->data) ;p2=head->rlink;while (p2 ! =pl) if <p2->data<

25、pl->data) p2=p2 ->rlink;elsebreak;printf("pl should be in the front of %dn",p2->data);pl->llink->rlink-.pl->rlink;pl->rlink->llink=pl->llink;/* output (head) ;*/p3=pl;pl=pl->llink;p3->rlink=p2 ;p3->llink=p2->llink;p3->llink->rlink=p3;p2->llin

26、k=p3,;main ()pnode th=init () ;printf ("Before sort : n") ;output (lh) ;sort insert (lh) ;printf( "After sort :n");output (lh);getch();2 # define MAX 100void main()int dMAX;int s , j , t , n;printf ("How many nodes? n");scanf( "ood", &n);/* 接收输入结点值,放置在数组 d

27、 中*/for(s=O;s<n;s+)printf ("Input No ood valuen", s+l);scanf( "%d", &ds);/* 冒泡排序 */for(S=O;s<n;s+) for (j=0;j<n s 一 1;j+)/+ 从前往后比较,将最大的值放在后面*/if(dj>dj+1)/* 比较相邻接点的值 */ ft=dj+1;dj+1=dj;dj=t;/* 输出排序后的结点序列 */for(s=O; s<n;s+)printf("t%d",ds);printf("

28、 n ");3 ./* 标准文档模板*/#include"Stdio .h"#include"Conio h"struct _nodeint data;structnode *llink;structnode *rlink;typedef struct node node.typedef node*, pnode;insert (pnode h, int n) pnode i , head, pnew;head=h;pnew= (pnode) malloc( sizeof (node);if (pnew=NULL)printf( "M

29、emory allocate error!");exit (1);pnew->data=n;pnew->rlink-head->rlink;head->rlink=pnew;pnew->llink=head; pnew->rlink->llink=pnew;pnode init ()int i;pnode head;head= (pnode) malloc ( sizeof (node) ;if (head=NULL)printf ( "Memory allocate error ! ") ; exit (1) ;head

30、->rlink=head;head->llink=head;head->data=999;for (i=0; i<10; i+) insert (head, i) ;return head;void output (pnode h) pnode p=h;do p=p->rlink ;printf ( "%d", p->data) ; while (p->rlink!=h) ;printf ( " nn") ;void sort select (pnode head)pnode pl, p2, min;int te

31、mp;pl=head->rlink;while (pl->rlink ! =head) min=pl;p2=pl;while (p2->rlink ! =head) if (p2->data<min->data) min=p2 ;p2=p2->rlink; /*find min*/ temp=min->data;/* insert min to right position */min->data=pl->data;pl->data=temp; pl=pl->rlink; ;main () pnode th=init ()

32、 ;printf ("Before sort : n") ;output (lh) ;sort select (lh) ;printf ("After sort : n") ;output (lh) ;getch () ; 4. #include "Stdio.h"#include "Conio.h"void dui_format (int *d, int n) int s,t,q;s= (n-l) /2;while (s>=0)while ( q=2*s+l) <n) s=q;elsebreak; s

33、-; d (q-l) /2 =t;void out_heap(int* d,int n)int i;printf ( "nn") .main ()intdata10=f 3,6,8,4,2,1,7,9,5,10);out_heap (data, 10);/* 堆原始数据*/duiformat (data, 10);out_heap (data, 10);/* 初始化完成后的堆(以验证) */ getch();5./* 双向起泡排序是每一趟通过每两个相邻的关键字进行比较,产生最小和最大的元素。 */#include - Stdio . h "#include &qu

34、ot;Conio h"void sort (int *d, int n) int i , j , temp;for (i=O; i<n;i+)for (j=0; j<n-i-l; j+)if(dj>dj+1) temp=dj;dj=dj+1;d j+l =temp;void output (int *d, int n)int i;for (i=O;i<n;i+)printf( "%d 一,di);printf( " nn");main()int data 10=3,36,8,43, 19,1,7,9,5,10);clrscr();

35、output (data, 10);sort (data, 10);output (data, 10);getch();6 #include<stdlib h>void oesort (int a,int n)int i , flag;int t :do flag=0;for (i=l; i<n-l; i=i+2)if(ai>ai+1)flag=1;t=ai+1;ai+1=ai;ai=t;for (i=0; i<n-l; i=i+2)printf ( "n") ;for (i=0; i<10; i+)getch () ;while (fl

36、ag! =0);main () int i;intn=10;int A10=1, 32, 45, 78, 56, 98, 95, 4, 5, 6 ;printf ( " 排序前: ") ;for (i=0; i<10; i+)printf ( "%dt", A i ) ;oesort (A, n) ;printf ("t 排序后 :");for (i=0; i<10; i+)printf ( "%dt", A i ) ;getch () ;7 . #include " stdio . h"#include "stdlib.h"struct nodeint key;struct node *link;typedef struct _node node;typedef node; * pnode;insert (pnode h, int n)pnode p,pnew;p=h;pnew= (pnode) malloc ( sizeof (node ;if (pnew=NULL)printf ( "Memory allo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论