数据结构(排序)知识点及练习(五)附加答案

类别排序方法时间复杂度空间复杂度稳定性
最好情况最坏情况平均情况辅助存储
插入排序直接插入排序O(n)O(n²)O(n²)O(1)稳定
希尔排序O(n)O(n²)~O(n^1.3)O(1)不稳定
交换排序冒泡排序O(n)O(n²)O(n²)O(1)稳定
快速排序O(nlogn)O(n²)O(n)O(nlogn)不稳定
选则排序直接选则排序O(n²)

O(n²)

O(n²)O(1)不稳定
堆排序O(nlogn)O(nlogn)O(nlogn)O(n²)不稳定
归并排序O(nlogn)O(nlogn)O(nlogn)O(n)稳定

基数排序

k:待排元素的维数,m为基数的个数

O(n+m)O(k*(n+m))O(k*(n+m))O(n+m)稳定

冒泡排序

public class Test  { //冒泡排序
    public static void BubbleSort(int[] arr) {
	        int temp;//定义一个临时变量
	        for(int i=0;i<arr.length-1;i++){//冒泡趟数
	            for(int j=0;j<arr.length-i-1;j++){
	                if(arr[j+1]<arr[j]){
	                    temp = arr[j];
	                    arr[j] = arr[j+1];
	                    arr[j+1] = temp;
	                }
	            }
	            
	        }
            for(int k=0;k<arr.length;k++) {
    			System.out.print(arr[k]+" ");//2 3 5 7 13 23 44 
    		} 
	    }
     public static void BubbleSort(int[] arr) {
        int a[]={13,44,3,23,5,7,2};
	    	BubbleSort(a);
}

}

选择排序

public class Test {
	public static void xuanzepaixu(int arr[]) {
		for (int i = 0; i < arr.length; i++) {
			for (int j = i + 1; j < arr.length; j++) {
				if (arr[i] > arr[j]) {
					int tmp = arr[i];
					arr[i] = arr[j];
					arr[j] = tmp;
				}
			}
			for (int k = 0; k < arr.length; k++) {
				System.out.print(arr[k] + ",");
			}
			System.out.println();
        //2,44,13,23,5,7,3,
        //2,3,44,23,13,7,5,
        //2,3,5,44,23,13,7,
        //2,3,5,7,44,23,13,
        //2,3,5,7,13,44,23,
        //2,3,5,7,13,23,44,
        //2,3,5,7,13,23,44,
		}
 
	}

	 

	public static void main(String[] args) {
		int a[] = { 13, 44, 3, 23, 5, 7, 2 };
		xuanzepaixu(a);
	}
}

1.对有n个元素的顺序表进行直接插入排序,在最坏情况下需比较______ 次关键字。

         A、n-1     

        B、n+1     

        C、n/2      

        D、n(n-1)/2

答案:D

2.对同一待排序序列分别进行折半插入排序和直接插入排序,两者之间可能的不同之处是______。        

        A、排序的总趟数    

        B、元素的移动次数 

        C、使用辅助空间的数量

        D、元素之间的比较次数

答案:D

3.以下排序方法中,不稳定的排序方法是______。        

        A、冒泡排序    

        B、直接插入排序    

        C、希尔排序    

        D、二路归并排序

答案:C

4.对整数序列(8,9,10,4,5,6,20,1,2)进行递增排序,采用每趟冒出一个最小元素的冒泡排序算法,需要进行的趟数是______。        

        A、3  

        B、4  

        C、6  

        D、8

答案:C

5.对一组数据(2,12,16,88,5,10)进行排序,若前三趟的结果如下:

第一趟:2,12,16,5,10,88

第二趟:2,12,5,10,16,88

第三趟:2,5,10,12,16,88

则采用的排序方法可能是______。           

        A、冒泡排序    

        B、希尔排序    

        C、二路归并排序    

        D、基数排序

答案:A

6.对8个元素的顺序表进行快速排序,在最好情况下,元素之间的比较次数为______ 次。

        A、7  

        B、8  

        C、12

        D、13

答案:D

     【解析】当元素随机排序时,且每次选取参考元素均为其中值时,快速排序呈现最好的状况。在8个元素的情况下,设这8个元素为O-7,则比较7次的元素为4,比较3次的元素为2,比较2次的元素为6,比较1次的元素为1,其余各元素在以其他元素为基准进行比较时位置已经确定,因此需要进行比较的次数为:7+3+2+1=13,答案为D项。
 

7.对关键字序列(28,16,32,12,60,2,5,72)进行快速排序,第一趟从小到大一次划分结果为______。           

        A、(2,5,12,16) 26 (60 32 72)  

        B、(5,16,2,12) 28 (60,32,72)    

        C、(2,16,12,5) 28 (60,32,72)    

        D、(5,16,2,12) 28 (32,60,72)

答案:B

8.以下关于快速排序的叙述中正确的是______。            

        A、快速排序在所有排序方法中为最快,而且所需辅助空间也最少

        B、在快速排序中,不可以用队列替代栈    

        C、快速排序的空间复杂度为O(n)

        D、快速排序在待排序的数据随机分布时效率最高

答案:D

9.设有n(n为大于10000的整数)个无序元素,希望用最快速度从中选择前k(1≤k≤n)个关键字最小的元素,在以下排序方法中应选择______。       

        A、快速排序    

        B、希尔排序    

        C、二路归并排序

        D、直接插入排序

答案:A

10.在一般情况下,以下排序算法中元素移动次数最少的______。       

        A、直接插入排序    

        B、冒泡排序    

        C、简单选择排序    

        D、都一样

答案:C

11.2n个不同的元素选择其中最小元素所需关键字比较次数最少是______次。             

        A、n  

        B、2n

        C、2n-1   

        D、n-1

答案:C

12.以下序列不是堆的是______。       

        A、(100,85,98,77,80,60,82,40,20,10,66)     

        B、(100,98,85,82,80,77,66,60,40,20,10)      

        C、(10,20,40,60,66,77,80,82,85,98,100)     

        D、(100,85,40,77,80,60,66,98,82,10,20)

答案:D

13.有一个整数序列为(15,9,7,8,20,-1,7,4),用堆排序的筛选方法建立的初始堆为______。        

        A、(-1,4,8,9,20,7,15,7)   

        B、(-1,7,15,7,4,8,20,9)   

        C、(-1,4,7,8,20,15,7,9)   

        D、以上都不对

答案:C

14.在二路归并排序中归并的趟数是______。          

        A、n  

        B、log2n  

        C、log2n+1     

        D、n2

答案:B

15.以下排序方法中,______ 不需要进行关键字的比较。            

        A、快速排序    

        B、二路归并排序    

        C、基数排序    

        D、堆排序

答案:C

16.以下4个线性表中,最适合采用基数排序的是______。          

        A、10000个实数    

        B、1000个由字母、数字和其他字符组成的字符串   

        C、1000个int类型的整数    

        D、10000个100以内的正整数

答案:D

17.对给定的关键字序列(110,119,007,911,114,120,122)进行基数排序,则第2趟分配 收集后得到的关键字序列是______。             

        A、007,110,119,114,911,120,122

        B、007,110,119,114,911,122,120 

        C、007,110,911,114,119,120,122

        D、110,120,911,122,114,007,119

答案:C

18.以下排序方法中,______ ,在初始序列已基本有序的情况下,排序效率最高。          

        A、冒泡排序

        B、直接插入排序    

        C、快速排序    

        D、堆排序

答案:B

19.数据序列(8,9,10,4,5,6,20,1,2)只能是______ 算法的两趟排序后的结果。               

       A、简单选择排序

       B、冒泡排序 

        C、直接插入排序

        D、堆排序

答案:C

20.以下排序算法中,______ 在最后一趟排序结束之前可能所有元素都没有放到其最终位置上。          

        A、简单选择排序

       B、希尔排序 

        C、堆排序    

        D、冒泡排序

答案:B

21.下列排序方法中,______ 在一趟结束后不一定能选出一个元素放在其最终位置上。

        A、简单选择排序    

        B、冒泡排序    

        C、二路归并排序    

        D、堆排序

答案:C

22.整数序列(3,2,4,1,5,6,8,7)是第一趟递增排序后的结果,则采用的排序方法可能是______。        

        A、快速排序    

        B、冒泡排序    

        C、堆排序

        D、简单选择排序

答案:A

23.整数序列(5,4,15,10,3,2,9,6,1)是某排序方法第一趟后的结果,该排序算法可能是______。        

        A、冒泡排序    

        B、二路归并排序    

        C、堆排序

        D、简单选择排序

答案:B

24.以下关于外排序的叙述中正确的是______。       

        A、外排序把外存文件调入内存,再利用内排序进行排序,所以外排序所花时间完全由采用的内排序决定   

        B、外排序分为产生初始归并段和多路归并两个阶段 

        C、外排序并不涉及文件的读写操作    

        D、外排序完全可以由内排序来替代

答案:B

25.将一个由置换-选择排序方法得到的输出文件F1作为输入文件再次进行置换-选择排序,得到输出文件F2,问F1和F2的差异是______。            

        A、F2归并段个数减少   

        B、F2中归并段的最大长度增大   

        C、F2和F1无差异 

        D、归并段个数及各归并段长度均不变,但F2中可能存在与F1不同的归并段

答案:C

数据结构相关知识点及相关练习题(1)_卓卓卓-CSDN博客

数据结构的相关练习(2)附加答案_卓卓卓-CSDN博客

数据结构的相关练习(3)附加答案_卓卓卓-CSDN博客

数据结构(图)的相关练习(四)附加答案_卓卓卓-CSDN博客

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值