H面试程序(14): 快速排序法

深信服C/C++面试题目总结 内容收集自网络 1. 链表和数组的相同点和不同点 特点 优点 缺点 数组 存储区域连续需要预先分配空间,可能造成空间浪费或者不利于扩展插入/删除效率低随机读取效率高 随机访问性强查找速度快 插入和删除效率低可能浪费内存内存空间要求高,必须有足够的连续内存空间数组大小固定,不能动态拓展 链表 存储区域不要求连续,每个数据都保存了下一个数据的地址(如果有)数据的增加/删除容易,易... 阅读详情

本文代码借鉴了http://blog.youkuaiyun.com/fduan/article/details/7914331

但也做了一些小的优化,就是在选择枢纽元的时候,采用了三数取中法,避免取到最大或最小的数作为枢纽元,在待排数比较多的情况下能有效减少排序的时间

 

#include <stdio.h>
#include <time.h>

void swap(int *a, int *b)
{
	int temp;
	temp = *a;
	*a = *b;
	*b = temp;
}
void disp_array( int a[], int n )
{
    int i;
    for( i = 0; i < n; ++i )
        printf( "%d ", a[i] );
    printf( "\n" );
}

int partition( int a[], int low, int high )
{  
	int m = low + (high - low) / 2;  //采用三数取中的方法,尽量避免枢纽元素是最大数或最小数
	if(a[low] >a[high])
		swap(&(a[low]),&(a[high]));
	if(a[m] > a[high])
		swap(&(a[m]), &(a[high]));
    if(a[m] > a[low])
		swap(&(a[m]), &(a[low]));
		
    int piv_val = a[low];
    while( low < high )
    {
        while( low < high && a[high] >= piv_val ) 
			--high;
        a[low] = a[high];
        while( low < high && a[low] <= piv_val ) 
			++low;
        a[high] = a[low];
    }
    a[low] = piv_val;
    return low;
}

void qsort_recur( int a[], int low, int high )
{
    int idx_piv;
    if( low < high )
    {
        idx_piv = partition( a, low, high );
        qsort_recur( a, low, idx_piv - 1 );
        qsort_recur( a, idx_piv + 1, high );
    }
}

void quick_sort( int a[], int n )
{
    qsort_recur( a, 0, n - 1 );
}

int main()
{   
	clock_t start, finish;
	start = clock();
    int a[] = {  10,9,8,7,6,5,4,3,2,1};
    int n = sizeof(a)/sizeof(int);
    
    printf( "Before sorting: " );
    disp_array( a, n );

    quick_sort( a, n );

    printf( "After sorting: " );
    disp_array( a, n );
    finish = clock();
    printf("\n本次计算一共耗时: %f秒\n\n", (double)(finish-start)/CLOCKS_PER_SEC);

    return 0;
}


 

【python】面试基础知识点 【python】面试基础知识点整理1、解释型和编译型语言的区别2、数据类型的常用方法3、简述 Python 中的字符串编码4、打印九九乘法表5、面向对象中__new__ 和 __init__ 区别6、实现二分法查找函数7、字符串格式化方式8、实现一个简单的 API9、实现一个斐波那契数列10、冒泡排序 python基础测试100题 1、解释型和编译型语言的区别 编译型语言:把做好的源程序全部编译成二进制的可运行程序。然后,可直接运行这个程序。如:C,C++ 解释型语言:把做好的源程序翻译一句,然后执行一句 阅读详情

相关推荐

广联达科技java开发岗面试以及收到offer的经历

笔试:        九月初,经过学长的内推,报了广联达科技股份有限公司上海研发岗位,一是因为实验室去年有两个师兄去了这个公司,二是因为在上海的薪资还是不错的,去年有14k*15,今年应该不会低的,最后也是听师兄说入职以后会到北京总公司进行为期三个月的专业培训还是挺心动的。        9-14收到笔试通知,9-17,下午三点到四点半参加了笔试,笔试直接是五道编程题,感觉这个公司对编程的要求...

Hjt81095的博客 9469

剑指offer——面试题11:快速排序

1 #include"iostream" 2 #include"random" 3 using namespace std; 4 5 /* 6 void Swap(int &a,int &b) 7 { 8 int tmp; 9 tmp=a; 10 a=b; 11 b=tmp; 12 } 13 */ ...

weixin_34197488的博客 593

php后端面试题实战整合(最全附答案)

mysql索引优化三范式存储引擎myisam和innodb锁事务explain查询优化主从复制读写分离 linux命令高并发权限管理RBAC redis和memecache超卖微信支付第三方登录MVC get和post php魔术方法常量 apache和ngiux 错误码 安全验证错误等级错误日志数组递归冒泡排序快速排序composer框架区别安全攻击设计模式tcp/udpsession面向对象多继承 正则swoole设计模式AJAX大流量单点登陆SSO正反向代理负载均衡seo优化加密方式 php8新特性

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 8199

面试题 17.14. 最小K个数-快速排序

输入: arr = [1,3,5,7,2,4,6,8], k = 4。设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。输出: [1,2,3,4]

weixin_43327597的博客 115

时频分析之STFT:短时傅里叶变换的原理与代码实现(非调用Matlab API)

STFT function [STFT, f, t] = mystft(x, win, hop, nfft, fs) % function: [STFT, f, t] = stft(x, win, hop, nfft, fs) % % Input: % x - signal in the time domain % win - analysis window function % hop - hop size % nfft - numb

frostime的博客 13万+

Python脚本自动化芯片设计?PyAether实战教程带你玩转EDA

本文通过PyAether实战教程,详细介绍了如何利用Python脚本实现芯片设计自动化。内容涵盖环境搭建、核心对象模型解析,并重点演示了原理图自动生成、参数化单元创建及设计验证流程集成,帮助EDA工程师从重复性手动操作中解放,显著提升设计效率与一致性。

e4f5g6h的博客 1318

快速排序

快速排序算法 快速排序一直是各大IT公司面试上机题的常考题目,如何破解一直很困惑,或者说一直忘记。下面用一种简单而且形象的描素来解决战斗。 该思想是基于填坑法和分治法的思想。下面先写算法: 填坑法: head,tail,key (1) set key=A[head],so A[head] is the first “empty”(当然不是真正的空) (2) do...

weixin_30733003的博客 80

C/C++程序员面试题

PS:      今天去福昕参加他们公司的笔试了,考的不是很爽。。。。。一些很简单的概念题,不知道怎么作答,看来要多多巩固下理论知识啦!!!!!!以下转:我从事技术工作,这几年的面试与被面试总结先说我去被面试的经验吧。回答清楚了2个问题,就能顺利过关了。1。为什么要离开上一家公司。2。公司为什么要雇佣你。问第一个问题的是hr(或老板),呵呵 ,即

kevon2012的专栏 2534

ADAS方案设计-CAN网络管理与休眠唤醒机制

文章摘要:本文介绍了车载控制系统的五种工作模式及其转换条件,包括睡眠模式、准备睡眠模式、就绪睡眠模式、正常工作模式和重复消息状态。系统唤醒条件包括接收到网络管理报文或电源ON档信号,休眠条件则需满足电源OFF档、功能完成等多重要求。针对下挂节点的网络管理报文发送规则,详细说明了不同状态下的报文发送策略,特别是在哨兵模式、OTA模式等特殊场景下的处理方式。系统在满足休眠条件后会立即停止发送下挂节点网络管理报文,确保电源管理的有效性。

xiandang8023的博客 325

Python调用CANoe(1)(启动与停止,变量和信号读写)

CANoe因为其封闭性(Vector独有),开发的时候,有很多局限性;Python 因为其开源,容易上手,功能强大,那么Python 和 CANoe结合会产生怎样的火花呢?

蚂蚁小兵 4万+

程序员面试100问:从基础到架构的全面指南(附详细答案)

摘要(150字): 《程序员面试100问》是一份涵盖计算机基础、数据结构、编程语言、数据库及系统设计的全面面试指南。内容包含经典问题解析,如TCP三次握手、哈希冲突解决、JVM内存模型、MySQL索引优化等,并附代码示例(如Python实现LRU缓存)。特别提供系统设计方法论(短链/秒杀系统)及开放问题回答模板。通过分类速查表(操作系统/网络/分布式等)和可视化图表(内存模型/架构设计),帮助候选人系统掌握面试核心考点。建议结合原理理解与实战练习,PDF完整版可通过关键词获取。(150字)

as_asdf的博客 1144

STM32Cube高效开发教程<基础篇>(一)----概述

一、 STM32系列器件和开发工具发展历史声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(基础篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。一、 STM32系列器件和开发工具发展历史。

我的博客 1172

常用算法:冒泡和快速排序

        常用算法栏目并非归类于图形学,原本准备博客全部只围绕图形学来学习讲解的,后面写着写着就准备把博客当日常笔记了,准备慢慢的从自己的有道云笔记选择一些持久且常用的知识点再次整理到博客上。先前我也说过了,最持久的知识无非就是理论、算法、数学、构架,所以呢?我准备这里先开这个栏目记录一下自己常用的算法。         最常用的算法那就是排序算法了,这个我相信是程序员都用过排序算法,我自...

羊羊的博客 1153

使用curl命令出现fatal: unable to access ‘https://github.com/nvm-sh/nvm.git/‘: Encountered end of file的解决方案

本文主要介绍了使用curl命令出现fatal: unable to access ‘https://github.com/nvm-sh/nvm.git/’: Encountered end of file的解决方案,希望能对使用curl命令的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

百度统计 java 实现思路_拿下百度面试,这篇面经就够了

1公司:百度牛友:Try一面: 40分钟1.绝对定位与相对定位的区别2.js的继承实现3.js轮播实现思路4.使用js画一个抛物线,抛物线上有个小球随着抛物线运动,有两个按钮能使小球继续运动停止运动5.介绍一下之前做的项目6.简历里头有些java五子棋,说下实现思路7.什么时候能来实习啥的8.还有一些网络方面的知识二面:15分钟完全没印象了,是部门主管面的问了挺多java知识,问题是我去的是前端三...

weixin_39724004的博客 436

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

5.14号模拟前端面试10问

Redux是一个流行的JavaScript状态管理库,用于管理和更新应用程序的状态。它的工作流程主要包括以下几个步骤:初始化状态:在应用程序启动时,我们首先需要定义一个初始状态。这个初始状态可以是一个普通的JavaScript对象或数组。创建Actions:Actions是描述状态变化的对象,它们包含一个type属性来标识操作类型,并可以携带一些额外的数据。创建Reducers:Reducers是处理Actions的函数,根据接收到的Actions来更新状态。

极客前端探索者的博客 890

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

面试与被面试总结

面试与被面试总结 我从事技术工作, 这几年的面试与被面试总结 先说我去被面试的经验吧。 回答清楚了2个问题,就能顺利过关了。 1。为什么要离开上一家公司。 2。公司为什么要雇佣你。 问第一个问题的是hr(或老板),呵呵 ,即使你技术过关,hr那里没有好的影响,结果是一个字,难! 如何回答呢? hr想推论出你在他的公司能呆多久。这个时候,你甚至可以明确告诉他,我在贵公司至少能呆n(n

Jack_xk的专栏 462

C/C++面试笔试详细总结—基本概念及其它问答题

干货:C/C++笔试面试详细总结—基本概念及其它问答题 前言 本文覆盖了C/C++工程师面试的95%以上的常考基础概念及技术细节问答题(不含STL和socket以及嵌入式的深入问答,仅为中等层面问答),整理总结不易,不点赞收藏一波再走嘛? 文章目录干货:C/C++笔试面试详细总结—基本概念及其它问答题前言1、关键字 static 的作用是什么?2、“引用”与指针的区别是什么?3、.h 头文件中的 ifndef/define/endif 的作用?4、#include 与 #include “file.h”的

Spuer_Tiger 1万+

面试中常见的C/C++面试必考题

面试中常见的C/C++面试题 写这篇博客的目的,主要是记录一下在面试、笔试中,经常遇到的C/C++相关的出现频率较高的知识点。 个人经验、能力有限,热烈欢迎大家提供自身经历过的真实原题及答案。(众人拾柴火焰高!) 1、C和C++的区别(至少说出三点) 答:(1)C++是面向对象语言,C是面向过程语言。 (2)结构:C以结构体struct为核心结构;C++以类class为核心结构。...

yishuihanq的博客 4338

从快速排序说起

排序算法是各种笔试,面试最常考到的一类题目,提到排序,一定会要求提供一种高效的方法,所以就不得不说一下快速排序了。快嘛! 写出快速排序一定要先理解什么是枢纽元(pivot),枢纽元就是每次执行快排需要参照的那个元素。 最常见的选择pivot的方法是选择第一个元素。此外还有最后一个元素,随机选择,中值法等等。 比如 20,34,4,53,43,42,6,67,193 选择20为p...

weixin_30901729的博客 90

我的面试准备

在求职中,我主要投报了软件研发和嵌入式软件研发两个职位,与各位分享一下我的面试准备。 面试需要准备一下几个方面: 首先,是自我介绍 准备一段1分钟之内的自我介绍,包含基本的个人消息,项目信息,获奖信息等。不要太长,简历上有的尽量简练。   第二,做过的项目 将自己做过的项目整理,准备两个方面: (1) 项目的内容 (2) 涉及的关键技术 面试时,表达力求清晰。   第三,技术

tandesir的专栏 3176

2024-JAVA-大数据-面试汇总_大数据java部门面试

1,sex 改为age,非空,默认值为02 统计035号课程分数大于036号课程分数的学生ID3 统计所有003班学生各门功课的课程名称和平均分以上是所有的面试题,在写sql的时候,卡了好久,因为好久没写过三表联查,子查询的sql,差不多忘了,后来下线时,一度以为自己挂了,但是过了一个多小时之后,看了一下状态,面试一轮通过,可能是面试官看我前面的问题答得还可以让我过吧。只是这问题量着实有点多。希望尽快约下轮面试。

2401_84160087的博客 1351

H面试程序(1)编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的 下一秒

编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。 如输入 2004 年 12 月 31 日 23 时 59 分 59 秒,则输出 2005年 1 月 1 日 0 时 0 分 0 秒。 void ResetTheTime(int *year,int *month,int *date,int *hour,int *minute,int*second) { int

linuxlinuxlinuxlinux的专栏 6191
上一篇: H面试程序(12): 输出字符串中第一个只出现一次的字母
下一篇: H面试程序(17): 堆排序
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值