一、排序

1.快速排序在下列哪种情况下最易发挥其长处?

答案是:

被排序的数据完全无序。

在数据基本有序的情况下,会退化为冒泡排序,复杂度会退化为O(n^2)。

[因为,如果是基本有序的话, 那么每次选取pivot,那么就会将序列分为两个长度相差很大的序列,比如1和n-1个,这样复杂度就会变成O(n^2),就是冒泡排序了]

[最好的情况就是分称平均得两份,那么复杂度是O(nlogn)]。

 为什么呢?

//快速排序的思想都忘了,到底是i和j互换吗?代码实现也不怎么会写,是递归调用吗?(是递归调用)

转自:https://www.cnblogs.com/surgewong/p/3381438.html

选取两个指向,一个是i从前向后,一个是j从后往前,i呢是越过所有小于pivot的元素(遇到等于pivot的不停),j呢越过所有不小于pivot的元素(对于等于pivot的元素不停,对它们i已经负责交换了,j就不必负责相等值得交换),通过这样可以消除逆序,而且分为更短的序列,序列之间不会再进行比较,减少了比较次数。

 ②还有非常重要的一点就是:快速排序使用递归调用需要栈,如果是序列平均分的话,那么递归最大深度就是O(logn),如果是按照非常不平均1和n-1那么最大调用深度就是O(n)。

:快速排序在排序过程中是根据基数值来进行比较,并不是进行相邻元素的比较,所以是一种不稳定的排序。

#include <iostream>

using namespace std;
int a[]={ , , , , ,};
void qs(int f,int t){
int pivot=f;
int i=f,j=t;
while(i<=j){//那么在这又产生了一个疑问,到底快排是稳定还是不稳定的呢?
while(j>a[pivot]&&j>i){
j--;
}
while(i<=a[pivot]&&i<j){
i++;
} }
} int main(){
//手动实现快排,加深印象。 //int pivot=0;
qs(,);
return ;
}

My laji Code

//这个代码太厉害了!

#include <stdio.h>

#define MAX_NUM 80

void quicksort(int* a, int p,int q)
{
int i = p;
int j = q;
int temp = a[p]; while(i < j)//不用=,那样自己和自己交换也没意思,应该也不会产生这样吧。
{
// 越过不小于基准值的数据
while( a[j] >= temp && j > i ) j--; if( j > i )
{
a[i] = a[j];//是这样赋值,而不是交换。
i++;//赋值完了之后,忘后移动一个。 // 越过小于基准值的数据
while(a[i] <= temp && i < j ) i++;//这个时候i再往前走。
if( i < j )
{
a[j] = a[i];
j--;//赋值完了之后,往前移动一个。
}
}
}
a[i] = temp;//这里i被赋值为temp。 for(int k = p; k <= q;k++)//这个主要就是打印一下序列。
{
if( k == i )
{
printf("(%d) ",a[k]);
continue;
}
printf("%d ",a[k]);
}
printf("\n"); if( p < (i-)) quicksort(a,p,i-);//递归调用。
if((j+) < q ) quicksort(a,j+,q);
} int main(int argc, char* argv[])
{
int a[MAX_NUM];
int n; printf("Input total numbers: ");
scanf("%d",&n); if( n > MAX_NUM ) n = MAX_NUM; for(int i = ; i < n;i++)
{
scanf("%d",&a[i]);
} printf("Divide sequence:\n");
quicksort(a,,n-); printf("The sorted result:\n");
for(int i = ; i < n;i++)
{
printf("%d ",a[i]);
}
printf("\n"); return ;
}

运行结果:

2.下面的排序方法中,关键字比较次数与记录的初始排列无关的是_

无关是什么意思呢?就是在最好最坏平均情况下它的复杂度都不变的。

那么从图中可以看出,是直接选择排序,堆排序,归并排序与初始状态无关。//这个图要多背几遍啊!

 3.个数约为 50k 的数列需要从小到大排序, 数列特征是基本逆序 (多数数字从大到小,个别乱序) ,以下哪种排序算法在事先不了解数列特征的情况下性能大概率最优(不考虑空间限制)___.

堆排序。

专项训练错题整理-nowcoder-算法的更多相关文章

  1. 专项训练知识点与错题整理-nowcoder-c++

    1- 来自:http://www.cskaoyan.com/thread-595813-1-1.html 1.拷贝构造函数 转自:https://www.cnblogs.com/alantu2018/ ...

  2. JSP前三章错题整理

    A: B: C: D:  web-inf目录中的文件不能被客户端直接访问. 正确答案是 C 您回答的是 D 回答错误 试题分析纠错设为收藏 (选择一项) 14 A: B: C: Tomcat作为Web ...

  3. java的错题整理

    为了阅读方便,我们写代码时要缩进,以便于更好的理解代码 对象是是具有相同属性和共同行为的一组类的实例,不是集合. B是标准格式,D没有对象接收它,所以这样子. boolean的默认值是false如果一 ...

  4. 初识waindows窗体程序错题整理

    解析:A:Items表示集合B:获取或设置 ComboBox 的可编辑部分中选定的文本.C:SelectedIndex是索引D:获取或设置 控件中选定项的模板 解析:本题目考不同窗体之间跳转的方法,使 ...

  5. python错题整理

    1.列表list去重 l1 = [1,1,2,3,5,5,4,4,4,5,6] set1 = set(l1) # print(set1) # set是集合 l2 = list(set1) # 将集合转 ...

  6. 错题集锦(二) -- Java专项

    错题集锦(二) -- Java专项 标签(空格分隔): 找工作 JVM的内存模型 线程共享: 堆(Heap):主要存放一些对象实例 方法区(Method Area / Non-Heap):用于存储已被 ...

  7. 谷歌大规模机器学习:模型训练、特征工程和算法选择 (32PPT下载)

    本文转自:http://mp.weixin.qq.com/s/Xe3g2OSkE3BpIC2wdt5J-A 谷歌大规模机器学习:模型训练.特征工程和算法选择 (32PPT下载) 2017-01-26  ...

  8. Bug是一种财富-------研发同学的错题集、测试同学的遗漏用例集

    此文已由作者王晓明授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 各位看官,可能看到标题的你一定认为这是一篇涉嫌"炒作"的文章,亦或是为了吸引眼球而起的标 ...

  9. 计算机二级C语言选择题错题知识点记录。

    计算机二级C语言选择题错题知识点记录. 1,在数据流图中,用标有名字的箭头表示数据流.在程序流程图中,用标有名字的箭头表示控制流. 2,结构化程序设计的基本原则:自顶向下,逐步求精,模块化,限制使用g ...

随机推荐

  1. 回文树(回文自动机) - URAL 1960 Palindromes and Super Abilities

     Palindromes and Super Abilities Problem's Link: http://acm.timus.ru/problem.aspx?space=1&num=19 ...

  2. ThinkPHP 的URL重写时遇到No input file specified的解决方法

    因为在Fastcgi模式下,php不支持rewrite的目标网址的PATH_INFO的解析 ThinkPHP运行在URL_MODEL=2时,会出现 No input file specified.的情 ...

  3. MyBatis 最强大的特性之一就是它的动态语句功能

    MyBatis 最强大的特性之一就是它的动态语句功能.如果您以前有使用JDBC或者类似框架的经历,您就会明白把SQL语句条件连接在一起是多么的痛苦,要确保不能忘记空格或者不要在columns列后面省略 ...

  4. final可以修饰类、属性、方法

    final可以修饰类.属性.方法. 当用final修饰类的时候,此类不可被继承,即final类没有子类.这样可以用final保证用户调用时动作的一致性,可以防止子类覆盖情况的发生. 当利用final修 ...

  5. Java去除所有非中文字符串

    "fdsfjasd阿斯顿飞机阿斯蒂芬,,,,,,,,....".replaceAll("[^\u4E00-\u9FA5]", "");

  6. 集成学习AdaBoost算法——学习笔记

    集成学习 个体学习器1 个体学习器2 个体学习器3   ——> 结合模块  ——>输出(更好的) ... 个体学习器n 通常,类似求平均值,比最差的能好一些,但是会比最好的差. 集成可能提 ...

  7. ios 开发之 -- 极光推送,发送自定义消息,进入制定页面

    在进行极光推送时候,发现版本有所更新,以前截取didfinish入口方法里面的launchOptions,获取一个本地的通知内容,进行本地展示不可用了,通过查询官方文档和网上的资料才发现,方法改变了, ...

  8. Surface UEFI 菜单显示

    下载 Surface 的恢复映像   https://support.microsoft.com/zh-cn/surfacerecoveryimage UEFI 设置只能在系统启动时进行调整.若要加载 ...

  9. hdu4525

    可以发现天的操作相当于*(k1+k2) 然后就很好判断了. 威威猫系列故事——吃鸡腿 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 6 ...

  10. eclipse 的代码着色插件 --Eclipse Color Theme

    Eclipse Color ThemeEclipse自带的背景颜色是白色的,很伤眼睛,故而安装一个颜色和主题插件,来改变代码区域的背景颜色以及关键字的颜色. 网址:http://eclipsecolo ...