(期末考试prepare)数据结构(c语言版)第八章——内部排序(插入/选择/冒泡/快排/堆排序/基数排序)

数据结构期末复习系列 · 持续更新:

图的深度遍历和广度遍历
图的邻接矩阵和邻接表表示
串的基本知识及操作
数据结构期末考试提纲(重点复习知识汇总)
期末考试 | 数据结构第五章 | 树和二叉树·附习题
期末考试 | 数据结构第七章 | 查找(顺序表、树表、哈希表)·附习题
期末考试 | 数据结构第八章 | 内部排序(插入/选择/冒泡/快排/堆排序/基数排序)
稀疏矩阵的三种表示方法·转置矩阵·矩阵相乘·十字链表表示法·数组的基本操作
栈的简单应用:数制转换·括号的匹配检验·行编辑·迷宫求解·表达式求值·递归调用
队列的基本概念·循环队列·银行排队场景驱动管理
线性表和链表的基本操作:初始化·定位查询·插入元素·删除·查找·双向链表

1.从未排序的序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置上的方法(插入排序)

2.从未排序的序列中挑选元素,将其依次放入已排序序列(初始时为空)的一端的方法(选择排序).
:与插入排序区别。选择排序是指逐次选出第i大的直接放到序列的第i位置

3.对n个不同的关键字有小到大进行冒泡排序,在下列(B)情况下比较次数最多
A.从小到大排序好 B.从大到小排序好 C.元素无序 D.元素基本有序
:讲的应该是冒泡排序的改进版(即用flag标志是否已为顺序,若未发生交换则已排好序),所以逆序时候冒泡排序并不理想

冒泡排序:O(n)
快速排序:O(nlog2n)

算法:

typedef struct{
int k;
}Rectype;

void BubbleSort(Rectype r[],int n){
int i,j;
for(i=1;ir[j+1].key){
flag=1;
t=r[j];
r[j]=r[j+1];
r[j+1]=t; }
}
if(flag=0) break;
}}

4.快速排序
(期末考试prepare)数据结构(c语言版)第八章——内部排序(插入/选择/冒泡/快排/堆排序/基数排序)_第1张图片
【不稳定排序】快速排序适合被排序元素完全无序情况,O(nlog2n);
若元素有序则不适合快排,时间复杂度上升为O(n2)

5.若一组记录的排序码为(46,79,56,38,40,84),用快速排序的方法,以第一个记录为基准得到的一次划分结果为(40,38,46,56,79,84)
:现在市面上初高中的习题解析超饱和,但是大学生的习题却几找不到解析,也是因为科目太多、整理了也没有利润卖不出去的原因。但是,小猿搜题真的太强大了哈哈哈,很多大学题目都能搜索到。比如这道题。

以46为基点,设置两个标志分别从前往后、从后往前,40<46,40《46;79>46,79到原来40位置上;38<46,56>46,这俩交换,最终46在中间,左边比它小,右边比它大。

不要觉得看了就会了,有印象就不用再动笔了。
马上期末考试了,看到这里,动笔再做一遍。我感觉这种题很大可能会考。

6.堆是一种(选择)排序,是(完全二叉树)

7.若一组数据的排序码为(46,79,56,38,49,84),则利用堆排序的方法建立的初始堆为(84.79.56.38.49.46)
(期末考试prepare)数据结构(c语言版)第八章——内部排序(插入/选择/冒泡/快排/堆排序/基数排序)_第2张图片
从下往上看,改,排
动手做

8.要求内存最大的排序方式(归并排序)【稳定排序】

9.数据表中有100000个元素,如果仅要求求出其中10个最大的元素,则采用(D)算法最节省时间
A.冒泡 B.快排 C.冒泡 D.堆排序
:时间复杂度低O(nlog2n):快排、堆排序、归并排序
通常的排序最好使用快排(堆排序比较和交换次数多),但是如果试求top k,最大最小的几个,则用堆排序(每趟排序能将最大/最小的元素放到最终位置上,因为每一趟都会弄成一个大顶堆/小顶堆)

10.基数排序(桶排序/箱排序)
设置若干个箱子,将关键字为k的记录放入第k个箱子,然后再连接
(如0-9有10个数,则准备10个桶即可)

eg:给出如下关键字序列{321,156,57,46,28,7,331,33,34,63},试按链式基数排序的方法,列出每一趟分配和收集的过程
(期末考试prepare)数据结构(c语言版)第八章——内部排序(插入/选择/冒泡/快排/堆排序/基数排序)_第3张图片
11.由于疫情下线上考试的公平性原因,选择题和填空题的比例减少,算法设计等大题的比例在上升。往年思修直接晚自习手机考试,今年也要用双机位。开卷考试还双机位这种操作真是搞不懂啊。。。感觉各科考试难度都提高了。包括大物也说选择题没有,概念简答题增多。。谁会背概念啊hhhhh

试以单链表为存储结构,实现简单选择排序算法。
void LinkSelectSort(LinkList &L){
p=L->next;//p仅仅表示第i个最小的位置,最后被当前最小值r赋值
while(p->next){
q=p->next;//q是不断变动的结点
r=p;//r指向关键字最小的结点
}
while(q){
if(q->datanext) r=q;
q=q->next;
}
if(r!=p)
{t=p->data
p->data=r->data;
r->data=p;
p=p->next;
}

也不知道数据结构的计算题什么难度什么情况,感觉难的自己根本写不出来了,稍微一变形一改要求就不会了。废废颓颓der。但是尽力准备叭。不靠谱的数据结构老师。。。平时成绩想一出是一出不说,考试题型什么的也没明确一下。总感觉好像数学院和物理院的老师教的好像教的都比较好,而我们自己院的,嗯ಠᴗಠ

笔者有陆续更新的数据结构每章、每块知识点的复习笔记及题型实练~
希望大家共同进步,期末加油!!!
点点关注不迷路呦 ~

你可能感兴趣的:(数据结构,数据结构,c语言,算法,排序算法,快速排序)