(完整word版)数据结构第八章排序_第1页
(完整word版)数据结构第八章排序_第2页
(完整word版)数据结构第八章排序_第3页
(完整word版)数据结构第八章排序_第4页
(完整word版)数据结构第八章排序_第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.1 B.2 C.n-l D.n 7直接插入排序的方法是从第A.1 B.2 C.3 D.n 8用堆排序的方法对A.1 B.2 C.n-l 9归并排序的方法对A.1 B.2 C.n-l10直接插入排序的方法要求被排序的数据A. 必须是顺序B.必须是链表11冒泡排序的方法要求被排序的数据A. 必须是顺序 B.必须是链表C.顺序或链表D.二叉树12快速排序的方法要求被排序的数据A. 必须是顺序 B.必须是链表( ) 个

3、记录开始,插入前边适当位置的排序方法。n 个数据进行排序,首先将 n 个记录分成 ( ) 组。D.nn 个数据进行排序,首先将 n 个记录分成 ( ) 组,两两归并。D.n( ) 存储。C.顺序或链表D.二叉树( ) 存储。( ) 存储。C.顺序或链表D.二叉树13排序方法中,从未排序序列中依次取出记录与已排序序列(初始时为空)中的记 录进行比较,将其放入已排序序列的正确位置上的方法,称为 ( )。A. 希尔排序B.冒泡排序 C.插入排序 D.选择排序14每次把待排序的记录划分为左、右两个子序列,其中左序列中记录的关键字均小 于等于基准记录的关键字, 右序列中记录的关键字均大于基准记录的关键字

4、, 则此排序方法 叫做 ( )。A. 堆排序 B.快速排序 C.冒泡排序D. Shell 排序15排序方法中,从未排序序列中挑选记录,并将其依次放入已排序序列(初始时为 空)的一端的方法,称为 ( )。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

5、,25,27,35,47,68,84) 则所采用的排序方法是 ( )。A. 选择排序 B.希尔排序 C.归并排序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)18n 个记录的直接

6、插入排序所需记录关键码的最大比较次数为( )。A. nlog2n B. n2/2C.(n+2)(n_1) 2 D. n-l19n 个记录的直接插入排序所需的记录最小移动次数为( )。A. 2(n-l) B. n2/2C. (n+3)(n-2)/2 D. 2n 20对以下关键字序列用快速排序法进行排序,( )的情况排序最慢。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

7、. 被排序的数据已基本有序C. 被排序的数据完全无序D. 被排序的数据中最大的值与最小值相差不大E. 要排序的数据中含有多个相同值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. 每次分区后,先处理较

8、长的部分C. 与算法每次分区后的处理顺序无关D. 以上都不对24直接插入排序和冒泡排序的平均时间复杂度为( ),若初始数据有序(即正序),则时间复杂度为 ( )。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

9、,48,92,86,33)B. (100,86,48,73,35,39,42,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 个记录的小根堆(堆顶记录最小)中,关键字最

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

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

12、间的前后相对位置保持 的排序方法称为稳定的排序方法。3在排序前,关键字值相等的不同记录间的前后相对位置 的排序方法称为不稳定的排序方法。4外部排序是指在排序前被排序的全部数据都存储在计算机的 存储器中。5写出一种不稳定的排序方法的名称 。6在直接插入排序的方法中,当需要将第f 个数据插入时,此时前 i-l 个数据是 的。7对一个基本有序的数据进行排序 排序方法运算次数最小。8在对一组记录 (54,38,96,23,15,72, 60,45,83)进行直接插入排序时,当把 第 7 个记录 60 插入到有序表时,为寻找插入位置需比较 次。9在利用快速排序方法对一组记录(54,38, 96,23,1

13、5, 72,60,45,83)进行快速排序时, 递归调用而使用的栈所能达到最大深度为 ,共递归调用的次数为 ,其中第二次递归调用是对 组进行快速排序。10在堆排序、快速排序和归并排序中,若只从存储空间考虑,则应首先选取方法, 其次选取 ,最后选取 方法;若只从排序结果的稳定性考虑,则应选取 ;若只从平均情况下排序最快考虑, 则应选取 ;若只从最坏情况下排序最快并且要节省内存考虑,则应选取 方法。11在堆排序和快速排序中,若原始记录接近正序或反序,则选用 ,若原始记录无序,则最好选用 。12在考虑如何选择排序中,若初始数据基本正序,则选用 ;若初始数据基本反序,则选用 。13对 n 个记录的序列

14、进行冒泡排序时,最少的比较次数是 。三、简答题1已知序列: 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, 67 7,

15、 765, 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如果把堆定义成:一种拟满树且每个结点的值既小于左孩子又小于右孩子,请写一 函数建立一个初始堆。5设

16、计一个函数修改冒泡排序过程以实现双向冒泡排序。 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 kn),然后将 An 与 Ai 换位。这样反复 n 次完成排序。编写实现上 述算法的函数第八章 排序第 8 章排序135、填空题关键字。不能保持。 快速排序、希尔排序和堆排序。 冒泡。4 (23, 38, 15)2不变。4外。6 有序。79.2 4 (23, 38, 15)。10. 堆排序,快速排序,归并排序,11. 堆排序快速排序。8. 3 。归并排序,快速排序,堆排序。12. 插入排序选择排序。1.D2.C3.A4.C5.A6.C8.B9.D10.A11.B12.A13.C14.B15.D16.D17.A18.C19.A20.D21. B,C22.C23.

18、A24. D,A25.C,A 26.B27.B,D 28.C29.D30.D31.C32.B33.C34.D35.C、选择题7.B13. n-l 。三、简答题1采用冒泡排序法排序的各趟的结果如下: 初始: 17, 18, 60, 40,7 ,32, 73, 65, 85 l 趟: 17, 18, 40,7,32, 60, 65, 73, 85 2 趟: 17, 18,7,32, 40, 60, 65, 73, 85 3 趟: 17,7,18, 32, 40, 60, 65, 73, 85 4 趟: 7, 17, 18, 32, 40, 60, 65, 73, 85 5 趟: 7, 17, 18

19、, 32, 40, 60, 65, 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 87 170 275 462,503 897, 908, 653, 5125 趟:

20、 61, 87,170 275462, 503 897, 908, 653, 5126 趟: 61, 87, 170, 275, 462, 503 897, 908, 653, 5127 趟: 61, 87,170, 275, 462, 503 512, 653 897 9088 趟: 61, 87,170, 275, 462, 503, 512 653 897 9089 趟: 61, 87,170, 275, 462, 503, 512, 653, 897 90810 趟:61, 87, 170, 275, 462, 503, 512, 653, 897, 9083采用基数排序法排序的各趟结

21、果如下: 初始: 503, 87, 512, 61, 908, 170, 897, 275, 653, 4621 趟(按个位排序): 170, 61, 512, 462, 503, 653, 275, 87, 897, 9082 趟(按十位排序): 503, 908, 512, 653, 61, 462, 170, 275, 87, 8973 趟(按百位排序): 61, 87, 170, 275, 462, 503, 512, 653, 897, 9084. 采用希尔排序的各趟结果如下:初始: 503, 17, 512, 908, 170, 897, 275, 653, 426, 154, 5

22、09, 612, 677, 76 5, 703,941 趟 (D1=8): 426, 17, 509, 612, 170, 765, 275, 94, 503, 154, 512, 908, 67 7, 897, 703, 6532 趟 (D2=4): 170, 17, 275, 94, 426, 154, 509, 612, 503, 765, 512, 653, 67 7, 897,703, 9083 趟 (D3=2): 170, 17, 275, 94, 426, 154, 503, 612, 509, 653, 512, 765, 67 7, 897,703, 9084 趟 (D4=1

23、): 17, 94, 154, 170, 275, 426, 503, 509, 512, 612, 653, 677, 70 3, 765,897, 9085 采用插入排序的各趟结果如下:初始: (70), 83, 100, 65, 10, 32,7,9l 趟: (70, 83), 100, 65, 10, 32,7,92 趟: (70, 83, 100), 65, 10, 32,7,93 趟: (65, 70, 83, 100), 10, 32,7,94 趟: (10, 65, 70, 83, 100), 32,7,95 趟: (10, 32, 65, 70, 83, 100),7,96

24、趟: (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,8 for (i=0; i<10; i十 +)insert (head, i) ;return head;void output (pnode h) pnode p=h; p=p->rlink ; printf ( "%d", p->data) ; while (p->rlink!=h) ;printf "nn&q

25、uot;) ;void sort_insert (pnode head) pnode pl, p2, p3, p4;int temp; pl=head->rlink;while (pl->rlink ! =head) pl=pl->rlink;printf ("current pl is %dn",pl->data) ; p2=head->rlink;while (p2 ! =pl) if <p2->data<pl->data) p2=p2 ->rlink; elsebreak;printf("pl sh

26、ould 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->llink=p3,;main ()pnode th=init () ;printf ("Before so

27、rt : 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 中 */for(s=O;s<n;s+)printf ("Input No ood value n&

28、quot;, 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(" n¨ );3./* 标准文档模板 */#include"Stdio .h"

29、;#include "Conio h" struct _node int data;structnode *llink;structnode *rlink;typedef structnode node.typedef node*, pnode;insert (pnodeh, int n) pnode i , head, pnew;head=h;pnew= (pnode) malloc( sizeof (node); if (pnew=NULL)printf( "Memory allocateexit (1); pnew->data=n; pnew->

30、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 ( "Memoryallocateexit (1) ;head->rlink=head; head->llink=head; head->data=999; for (i=0; i<10; i+) i

31、nsert (head, i) ; return head; void output (pnode h)pnode p=h;do error!");error ! ") ;p=p->rlink ;printf ( "%d", p->data) ; while (p->rlink!=h) ;printf ( " nn") ;void sort select (pnode head) pnode pl, p2, min;int temp;pl=head->rlink; while (pl->rlink ! =

32、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 po sition */min->data=pl->data;pl->data=temp;pl=pl->rlink;main ()pnode th=init () ;printf ("Beforesort : n") ;output (

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

34、ot;) .main ()int data10=f 3,6,8,4,2,1,7,9,5,10); out_heap (data, 10);/*堆原始数据 */dui format (data, 10);out_heap (data, 10);/*初始化完成后的堆(以验证) */getch();5./* 双向起泡排序是每一趟通过每两个相邻的关键字进行比较, 产生最小和最大的元素。 */#include¨ Stdio h "#include"Conio h"void sort (int*d, int n)int i , j , temp;for (i=O;

35、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();output (data, 10);sort (data, 10);output (data, 10); getch(

36、);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 (flag! =0); main () int i;int n=10;int A10=1, 32, 45, 78,

37、 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 ( "Memoryallocate err

温馨提示

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

评论

0/150

提交评论