• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

数据结构-十大经典排序算法 第6关极快排序

武飞扬头像
于建章
帮助1

目录

任务描述

相关知识

快速排序算法

编程要求

测试说明

参考代码


任务描述

本关任务:实现快速排序算法,并将乱序数列变成升序。

相关知识

为了完成本关任务,你需要掌握:1.快速排序算法。

快速排序算法

快速排序是最常用的一种排序算法,它的特点是速度快、效率高。快速排序的基本思想:选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。一般选择序列的第一个元素作为基准值。

  • 算法步骤:

    1. 从数列中挑出一个元素,称为基准pivot

    2. 分区partition操作:比基准值小的元素放在左边,比基准值大的元素放在右边;

    3. 递归recursive:把小于基准值元素的子数列和大于基准值元素的子数列分别递归排序。

学新通

编程要求

本关的编程任务是补全右侧代码片段partition_arrayquick_sortBeginEnd中间的代码,具体要求如下:

  • partition_array中,实现数组分区:选定一个基准,左边比基准小,右边比基准大,返回基准所处位置。
  • quick_sort中,实现快速排序:自上而下的递归方法。

测试说明

平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。

以下是平台的测试样例:

测试输入:

10

7 1 4 6 8 9 5 2 3 10

预期输出:

1 2 3 4 5 6 7 8 9 10

测试输入:

15

3 44 38 5 47 15 36 26 27 2 46 4 19 50 48

预期输出:

2 3 4 5 15 19 26 27 36 38 44 46 47 48 50


参考代码

  1.  
    //
  2.  
    // sort_.cpp
  3.  
    // Sort
  4.  
    //
  5.  
    // Created by ljpc on 2018/4/20.
  6.  
    // Copyright © 2018年 ljpc. All rights reserved.
  7.  
    //
  8.  
     
  9.  
    #include "sort_.h"
  10.  
     
  11.  
    void print_array(int *arr, int n)
  12.  
    // 打印数组
  13.  
    {
  14.  
    if(n==0){
  15.  
    printf("ERROR: Array length is ZERO\n");
  16.  
    return;
  17.  
    }
  18.  
    printf("%d", arr[0]);
  19.  
    for (int i=1; i<n; i ) {
  20.  
    printf(" %d", arr[i]);
  21.  
    }
  22.  
    printf("\n");
  23.  
    }
  24.  
     
  25.  
    int partition_array(int *arr ,int l,int r)
  26.  
    // 编程实现arr[l, r]分区:选定一个基准,左边比基准小,右边比基准大
  27.  
    // 返回基准所处位置
  28.  
    {
  29.  
    // 请在这里补充代码,完成本关任务
  30.  
    /********** Begin *********/
  31.  
    int t = arr[l];
  32.  
    while(l<r)
  33.  
    {
  34.  
    while((l<r)&&arr[r]>=t)
  35.  
    r--;
  36.  
    arr[l] = arr[r];
  37.  
     
  38.  
    while((l<r)&&arr[l]<=t)
  39.  
    l ;
  40.  
    arr[r] = arr[l];
  41.  
    }
  42.  
    arr[l] = t;
  43.  
    return l;
  44.  
    /********** End **********/
  45.  
    }
  46.  
     
  47.  
    int* quick_sort(int *arr, int l, int r)
  48.  
    // 基于partition_array函数编程实现快速排序:自上而下的递归方法
  49.  
    // 函数参数:有序数组arr 初始l=0,r=n-1
  50.  
    // 函数返回值:返回从小到大排序后的数组
  51.  
    {
  52.  
    // 请在这里补充代码,完成本关任务
  53.  
    /********** Begin *********/
  54.  
    int p = partition_array(arr,l,r);
  55.  
    if(l<r)
  56.  
    {
  57.  
    if(l<p-1)
  58.  
    arr = quick_sort(arr,l,p-1);
  59.  
    if(p 1<r)
  60.  
    arr = quick_sort(arr,p 1,r);
  61.  
    }
  62.  
    return arr;
  63.  
    /********** End **********/
  64.  
    }
学新通

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgghajg
系列文章
更多 icon
同类精品
更多 icon
继续加载