【数据结构】——排序算法简答题模板

目录

一、内排序和外排序

1、内排序和外排序有什么区别?内排序有哪些算法?

:根据排序过程中,数据元素是否完全在内存中进行,可分为内排序和外排序。内排序有直接/折半插入排序、简单旋转排序、冒泡排序、希尔排序、快速排序堆排序

二、排序算法的稳定性

1、什么是稳定排序?

:经过排序后能使关键字相同的元素保持原本顺序中的相对位置不变,则称这个算法是稳定的,反之则不稳定。

三、插入排序

(一)直接插入排序的步骤

1、简述直接插入排序算法的基本思想。

:直接插入排序是将要排序的序列按照关键字的大小插入至已排好序的子序列中,一直进行直到整个序列有序。

(二)直接插入排序的稳定性

1、直接插入排序算法是不是稳定的排序方法?

:由于每次插入元素时总是从后向前比较后再移动,所以不会出现相同元素相对位置发生变化的情况,即直接插入排序是稳定的。

(三)折半插入排序的步骤

1、简述折半插入排序算法的基本思想。

:折半插入排序的具体步骤如下:
初始化一个已排序序列,该序列只包含第一个元素,从第二个元素开始,通过折半查找确定每个待排序元素的插入位置,根据已排序序列中元素的中点,比较待排序元素与中点元素的大小,若待排序元素大于中点元素,则插入位置在中间位置的右侧;否则,插入位置在中间位置的左侧,然后插入元素,同时,需要将插入位置及其之后的所有元素向后移动一位,以为待排序元素腾出空间,重复步骤,直到所有元素都被插入到已排序序列中。

(四)希尔排序的步骤

1、简述希尔排序的基本思想。

:希尔排序也称为缩小增量排序,即通过选取一定的增量来排序的,本质还是插入排序,通过增量将序列分为几个子序列,然后对每个子序列进行直接插入排序

四、交换排序

(一)冒泡排序的步骤

1、简述冒泡排序的步骤。

:通过两两比较相邻的元素,若发生逆序,则进行交换,直到整个序列有序为止,即若某一趟冒泡排序中没有发生元素交换,说明此时序列已整体有序。

(二)快速排序的步骤

1、简述快速排序的步骤。

快速排序又称为分区交换排序,通过多次划分操作来实现排序思想,其步骤如下:
①每一趟排序中选取一个关键字作为枢轴;
②枢轴将待排序的序列分为两个部分,比枢轴小的元素移到其前,比枢轴大的元素移到其后,这是一趟快速排序
③然后递归地对两个部分按照枢轴划分规则继续进行快速排序,直至每个区域只有一个元素为止或序列为空,最后达到整个序列有序。

(三)快速排序的稳定性

1、试举例说明快速排序的稳定性。

快速排序是不稳定的。当快速排序在处理包含有相等的元素的数组时,相等元素的值没有改变,但它们的相对顺序已经发生了变化,从而导致排序结果不稳定。

五、堆排序

(一)堆排序的步骤

1、简述堆排序的基本思想。

堆排序的基本思想是利用大根堆(小根堆)进行排序的方法,步骤如下:
①将待排序的序列构造成一个大根堆(小根堆),此时,整个序列的最大值(最小值)即为堆的根结点。
②将当前根结点移走,即与堆数组的末尾元素交换,此时末尾元素就是最大值(最小值),然后将剩余的n-1个序列重新构造成一个堆,依次得到n个元素中的次大值(次小值);
③重复以上步骤,从而得到一个有序序列。

(二)堆排序的稳定性

1、堆排序是不是稳定排序?

堆排序不是,因为在进行筛选时可能会将后面相同关键字的元素调整到前面,所有不是稳定的排序算法

六、归并排序

(一)k路归并排序的步骤

1、什么是归并排序

:将已有序的子序列合并,得到完全有序的序列,其中先使每个子序列有序,再使子序列间有序,即为归并排序

(二)k路归并排序的稳定性

1、归并排序是不是稳定的?

归并排序是稳定的排序算法,满足稳定算法的定义,即假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面,且排序之后,a[i]仍然在a[j]前面。

(三)二路归并排序的步骤

1、简述二路归并排序的算法思想。

:二路归并排序的步骤如下:
①将含n个元素的序列分为由n个长度为1的有序子表;
②相邻的两个有序子表归并为一个有序子表(两两相邻归并);
③重复以上步骤,最终归并成一个长度为n的有序表。


http://www.niftyadmin.cn/n/5268830.html

相关文章

Android Spinner监听列表展开和收起状态

Spinner只提供展开的监听,并未提供收起的监听 有时候需要监听Spinner列表的收起,比如根据展开收起的状态,改变右边显示的arrow图标的方向 我们可以通过自定义Spinner来监听列表的展开和收起 自定义Spinner public class CustomSpinner ex…

MVC框架和Spring MVC的基本流程

MVC(Model-View-Controller)是一种设计模式,用于将应用程序的逻辑分离为三个不同的组件:模型(Model)、视图(View)和控制器(Controller)。MVC框架的原理是基于…

MyBatis Plus 大数据量查询优化

大数据量操作的场景大致如下: 数据迁移 数据导出 批量处理数据 在实际工作中当指定查询数据过大时,我们一般使用分页查询的方式一页一页的将数据放到内存处理。但有些情况不需要分页的方式查询数据或分很大一页查询数据时,如果一下子将数…

力扣题目学习笔记(OC + Swift) 11

11.盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾…

人工智能如何改变未来的教育

人工智能(AI)正在以惊人的速度发展,并有可能彻底改变我们生活的方方面面,包括教育。AI 可以用于提高教学效率、个性化学习体验和扩大教育机会。 在教学效率方面,AI 可以用于自动化许多繁琐的教学任务,例如…

【力扣100】234.回文链表

添加链接描述 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def isPalindrome(self, head: Optional[ListNode]) -> bool:# 思路是用一个数组接…

【lesson16】MySQL表的基本操作update(更新)和delete(删除)

文章目录 表的基本操作介绍update建表测试 delete建表测试 表的基本操作介绍 CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除) update 建表 这里就不建表了,因为之前就建过了,这里给大家…

C++核心编程思路(1):①程序的内存模型②引用的作用

文章目录 前言一、不同的存储类型变量,会被存储在什么区?①const修饰的局部变量放在栈区,全局变量放在只读数据区。②static修饰的全局和局部变量都放在静态区(即数据区中的一个小区) 二、栈区1.如果在函数A中定义了一…