zoukankan      html  css  js  c++  java
  • 快速排序C语言

    前言

        最近正在准备找工作,那些与编程相关的职位都是需要直接考察编程技能的,作为非计算机专业却又得硬着头皮去应聘的我来说,确实是个挑战。不过编程面试的好处就是,不用多说废话,行不行直接看代码,写出来什么就是什么,若是被鄙视,也是实力不济,没什么好说的。

        对于一些基础的核心的算法或者数据结构的实现,之前经历了淘宝华为的笔试面试,总之就是光懂是不行的,还得很熟练的写出来,或许一些比较复杂的问题可以跟面试官聊聊思路,但对于基础性的问题,是要能够熟练回答的,一般都是直接拿纸笔写,若基础问题过不了关,也没有继续下去的资格了。刚好,拿这个博客来练手,并整理收集一些基础的题目。作为一个菜鸟,道路很艰巨哪,时间也很紧促呀。

    问题

    快速排序的实现

        对于快速排序,很多教材上都说得很清楚了,或者上网查询一下也很容易找到完整的描述。但我就不在这里copy一遍了,最重要的还是自己能够理解到什么样的程度,以及能否实现出来,所以这里就只用自己的理解写点不那么专业的文字。

        快速排序在每一次的递归过程中所做的,就是从数组中选取一个基准数,然后对数组进行重新排,把小于该基准数的元素放在该基准数的左边,大于该基准数的元素放在该基准数的右边(若要求对数组进行递增排序的话)。

    small1  small2  small3 small4 middle large1 large2 large3 large4

    较简单的一种实现方法是(C语言)

    /*首先实现一个数组元素交换的函数*/

    void swap( int s[], int i, int j )

    {

        int temp;

        temp = s[i];

        s[i] = s[j];

        s[j] = temp;

    }

     

    /*快速排序*/

    void quicksort( int s[], int left, int right )        /*left为数组最左边的元素位置(0),right为数组最右边的元素位置(length - 1)*/

    {

        int i;

        int last = left;        /*这里的last是用来标记基准值在数组中所处位置的,即最终last之前的元素都小于基准值,last之后的值都大于基准值,s[last] == 基准值*/

        if( left >= right )

            return;

        for( i = left + 1; i <= right; i++)

        {

            if( s[i] < s[left] )        /*以起始元素s[left]为基准值*/

                {

                    last++;        /*从left + 1位置开始*/

                    swap( s, last, i );

                }        

        }        /*最终数组中left + 1 ~ last的元素都是小于s[left]的*/

        swap( s, last, left )        /*让基准值处在最终标记的位置*/

        quicksort( s, last + 1, right );        /*通过递归调用,对分隔出来的两个子数组再进行排序*/

        quicksort( s, left, last - 1 );

    }

    上面这个实现出处是《C程序设计语言》这本书( 不完全一样,书里面swap是对指针进行了交换 )

  • 相关阅读:
    js中当call或者apply传入的第一个参数是null/undefined时,js函数内执行的上下文环境是什么?
    闭包的实现原理和作用以及堆栈溢出和内存泄漏原理和相应解决办法
    JavaScript的作用域和作用域链
    词法作用域和动态作用域
    理解 es6 中class构造以及继承的底层实现原理
    new一个对象的详细过程,手动实现一个 new操作符
    实现继承的几种方式以及他们的优缺点
    理解JavaScript的执行上下文栈,可以应用堆栈信息快速定位问题
    原型和原型链-instanceof的底层实现原理
    js判断变量未定义
  • 原文地址:https://www.cnblogs.com/liangchao/p/2676821.html
Copyright © 2011-2022 走看看