有关排序知识点总结概括

排序
【目录】
1.排序的概念及其运用
2.常见排序算法的实现及排序算法复杂度及稳定性分析

1.排序的概念及其运用
1.1排序的概念
排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。
自我理解:把一组序列,按照关键字之间的大小关系,将其排列成一个递增或者递减的序列 ,将这样的一种操作称之为 排序

每一个排序都涉及一个想关性概念 --排序的稳定性
稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i] = r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。
自我理解:----------------------------------(1)画图

内部排序:数据元素全部放在内存中的排序。
自我理解:排序算法要求一次性将所有的数据加载到内存中才可以进行排序

外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序
自我理解:排序算法没有要求一次性将所有的数据加载到内存中才可以进行排序

1.2常见的排序算法
(通常为比较类性排序算法)
(如果元素之间需要排序,需要元素之间进行比较才可以排序)
(有些则不需要通过比较来进行排序,我们将之称为非比较类排序)
插入排序:直接插入排序 希尔排序
选择排序: 选择排序 堆排序
交换排序:冒泡排序 快速排序
归并排序:

2.常见排序算法的实现及排序算法复杂度及稳定性分析
代码实现:https://blog.csdn.net/sakeww/article/details/110682354

有关选择题

  1. 快速排序算法是基于(a )的一个排序算法。
    A分治法
    B贪心法
    C递归法
    D动态规划法
    自我理解:
    分治法:我们在处理一些问题的时候,我们先将其划分为一些小问题,然后对与他的每一个小问题,我们在进行单独的进行处理
    贪心法:在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解
    动态规划法:在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。

2.对记录(54, 38, 96, 23, 15, 72, 60, 45, 83)进行从小到大的直接插入排序时,当把第8个记录45插入到有序表时,为找到插入位置需比较(c )次?(采用从后往前比较)
A 3
B 4
C 5
D 6
(54, 38, 96, 23, 15, 72, 60, 45, 83)这组数据在进行第八个数据的插入时,第八个数据之前的所有元素已经比较好了,此时,前八个数据的顺序为:(15 23 38 54 60 72 96)在插45时,我们需要和(96 72 60 54 38)这些数字进行比较

3.以下排序方式中占用O(n)辅助存储空间的是d
A 简单排序 O(1)
B 快速排序 O(1)
C 堆排序 O(1)
D 归并排序
归并排序我们提出了n个辅助空间

4.下列排序算法中稳定且时间复杂度为O(n2)的是( b)
A 快速排序:O(NlogN) 不稳定
B 冒泡排序
C 直接选择排序:O(N
logN) 不稳定
D 归并排序:O(N*logN)

5.关于排序,下面说法不正确的是d
A 快排时间复杂度为O(N*logN),空间复杂度为O(logN)
B 归并排序是一种稳定的排序, 堆排序和快排均不稳定
C 序列基本有序时,快排退化成冒泡排序,直接插入排序最快
D 归并排序空间复杂度为O(N), 堆排序空间复杂度的为O(logN)
堆排序空间复杂度的为O(1)

6.下列排序方法中,最坏情况下时间复杂度最小的是(a )
A 堆排序:O(NlogN)
B 快速排序:O(N
logN)
C 希尔排序: O(N1.3—N2)
D 冒泡排序:O(N^2)

7.设一组初始记录关键字序列为(65, 56, 72, 99, 86, 25, 34, 66),则以第一个关键字65为基准而得到的一趟快速排序结果是(a)
A 34,56,25,65,86,99,72,66
B 25,34,56,65,99,86,72,66
C 34,56,25,65,66,99,86,72
D 34,56,25,65,99,86,72,66

Hoare方法
(65, 56, 72, 99, 86, 25, 34, 66)
我们设置基准值为65
我们需要两个前后指针
一个指向56 一个指向66
56和65 66和65进行比较–65, 56, 72, 99, 86, 25, 34, 66
前指针后移,后指针迁移,然后前后指针分别与65进行比较
65, 56, 34, 25, 86, 99, 72, 66
前后指针移动,此时两个指针指向同一个数字,因为我们的基准值取的是第一个数字,所以我们将65放到这个数字之前
25, 56, 34, 65, 86, 99, 72, 66(答案不对,重新选择方法)

挖坑法
两个指针,分别指向给定数字序列的开头和末尾,开头指针指向坑位,让后用末尾指针寻找比坑位的数字小的数字,找到之后,将末尾指针指向的数字放到坑位,然后开头指针向后移动寻找比基准值大的数字,末尾指针不动(指向坑位),当开头指针找到比基准值大的数字时,开头指针指向的数字和末尾指针指向的数字进行填补
(65, 56, 72, 99, 86, 25, 34, 66)
开头指针指向65,末尾指针指向66,66比65大,末尾指针前移指向34,34比65小,则令开头指针指向的数字为34即:
34, 56, 72, 99, 86, 25, 34, 66
此时,末尾指针指向34(坑位),开头指针指向56,56比65小,则开头指针后移一位指向72,72比34大,则令末尾指针指向的数字等于开头指针指向的数字72,即:
34, 56, 72, 99, 86, 25, 72, 66
此时,开头指针指向72(坑位),末尾指针前移指向25,25比基准值小,则令开头指针等于末尾指针指向的数字25,即:
34, 56, 25, 99, 86, 25, 72, 66
此时,末尾指针指向25(坑位),开头指针后移指向99,99比基准值大,则令末尾指针等于开头指针指向的数字99,即:
34, 56, 25, 99, 86, 99, 72, 66
此时,开头指针指向99(坑位),末尾指针前移指向86,86比基准值大,则末尾指针继续向前移动,当开头指针和末尾指针重合时,令指针重合的数字等于基准值,即
34,56,25,65,86,99,72,66

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值