栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

YTU 问题 : 快速排序算法(递归)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

YTU 问题 : 快速排序算法(递归)

题目描述

        快速排序算法它的时间复杂度为O(nlog2n),空间复杂度为O(log2n),其效率较高,并且它的排序思想-----分治法也非常实用,故常出现于腾讯、微软等知名IT公司的笔试面试中。
该方法的基本思想是:
 

  1. 先从数列中取出一个数作为基准数。(本题中数组第一个数为基准数)
  2. 分区过程,将小于或等于它的数全放到它的左边,将大于它的数全放到它的右边。(挖坑-填坑)
  3. 再对左右区间重复第二步,直到各区间只有一个数。(递归-分治)


下列已给出部分程序代码,请补全(只有quickSort函数需要补全)。 

#include 
#define LENTH 10

int AdjustArray(int s[], int l, int r); // 返回调整后基准数的位置d的函数
void quickSort(int s[], int l, int r); // 快速排序的主函数

int main()
{
    int arr[LENTH], i;

    for (i=0; i= x)
            j--;
        if (i < j)
            s[i++] = s[j]; // 将s[j]填到s[i]中,s[j]就形成了一个新的坑

        // 从左向右找大于或等于x的数来填s[j]
        while (i < j && s[i] < x)
            i++;
        if (i < j)
            s[j--] = s[i]; // 将s[i]填到s[j]中,s[i]就形成了一个新的坑
    }
    // 退出时,i等于j,将x填到这个坑中
    s[i] = x;

    return i;
}

// 快速排序主函数
void quickSort(int s[], int l, int r)
{
    .....
         .....
         .....
         .....
}



 

输入

一列整数

输出

从小到大排序的数列

输入输出样例

样例输入 #1

11 55 14 63 88 47 31 24 11 0

样例输出 #1

0 11 11 14 24 31 47 55 63 88

参考解答:

    int p = AdjustArray(s, l, r);
    if (l < p - 1)
    {
        quickSort(s, l, p - 1);
    }
    if (p < r - 1)
    {
        quickSort(s, p + 1,r);
    }

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875761.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号