(期末考试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;i<n;i++)//第i趟
{int flag=0;
for(j=1;j<=i-1;j++){
if(r[j].key>r[j+1].key){
flag=1;
t=r[j];
r[j]=r[j+1];
r[j+1]=t; }
}
if(flag=0) break;
}}

4.快速排序
在这里插入图片描述
【不稳定排序】快速排序适合被排序元素完全无序情况,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)
在这里插入图片描述
从下往上看,改,排
动手做

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},试按链式基数排序的方法,列出每一趟分配和收集的过程
在这里插入图片描述
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。但是尽力准备叭。不靠谱的数据结构老师。。。平时成绩想一出是一出不说,考试题型什么的也没明确一下。总感觉好像数学院和物理院的老师教的好像教的都比较好,而我们自己院的,嗯ಠᴗಠ

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

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您可以按照以下步骤在NetBeans中创建一个带有GUI的Java项目,并将其连接到数据库以插入数据: 1. 打开NetBeans并创建一个新项目。选择“Java”类别,然后选择“Java应用程序”。 2. 在“项目名称”字段中输入您的项目名称,并选择项目的位置。 3. 单击“下一步”,然后输入“Main Class”名称并单击“完成”按钮。 4. 在项目资源管理器中,右键单击项目名称并选择“新建”>“JFrame表单”。这将创建一个名为“NewJFrame”的JFrame表单。 5. 在表单设计器中,将必要的组件拖放到表单中。例如,您可以将标签、文本框和按钮添加到表单中。 6. 右键单击表单并选择“事件”>“动作”>“ActionPerformed”。这将创建一个名为jButton1ActionPerformed的ActionEvent。 7. 在jButton1ActionPerformed方法中添加以下代码: ```java String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "root"; String password = "password"; String sql = "INSERT INTO mytable (column1, column2) VALUES (?, ?)"; try (Connection conn = DriverManager.getConnection(url, user, password); PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, jTextField1.getText()); stmt.setString(2, jTextField2.getText()); stmt.executeUpdate(); } catch (SQLException e) { System.out.println(e.getMessage()); } ``` 这将连接到名为“mydatabase”的MySQL数据库,并向名为“mytable”的表中插入两个值(从jTextField1和jTextField2中获取)。 8. 运行项目并测试它是否能够连接到数据库并插入数据。 这就是在NetBeans中创建带有GUI的Java项目并将其连接到数据库以插入数据的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值