008.AcWing 785. 快速排序(003)

简介: 这题考察了快排的实现,我之前写过一篇博客总结了八大排序☞《详解八大排序》

一,知识点

这题考察了快排的实现,我之前写过一篇博客总结了八大排序☞《详解八大排序》


二, 题目(简单)

给定你一个长度为 n的整数数列。


请你使用快速排序对这个数列按照从小到大进行排序。


并将排好序的数列按顺序输出。


输入格式


输入共两行,第一行包含整数 n。


第二行包含 n个整数(所有整数均在 1∼109范围内),表示整个数列。


输出格式

输出共一行,包含 n 个整数,表示排好序的数列。


数据范围

1≤n≤100000



输入样例:

5

3 1 2 4 5



输出样例:

1 2 3 4 5


三,思路

总体思路:选定一个key,然后把比key小的放到key左边,比key大的放在key的右边

怎么选key?

为了防止恰是逆序的情况,我们可以在数组中随机取值,或者在第一个元素、最中间一个元素、最后一个元素中选择中间值。

当然还有其他的方式,但是只要可以减小碰到极端情况的概率即可。在这里我是直接取中间一个元素作key。

怎么把比key小的放在左边,大的放在右边呢?

有几种方式可以看我在开头说的那篇文章里有介绍,这里所说的是其中一种:定义两个指针,指针一从左至右找到比key大的就停下,指针二从右至左找到比key小的就停下,然后交换两个元素,直至两个指针相遇,这样到最后我们就确定了key的位置。

递归

四,AC代码

#include<iostream>
using namespace std;
int nums[1000010];
void quiksort(int nums[],int left,int right)
{
    if(left>=right)return;
    int index=nums[(left+right)/2];
    int l=left-1,r=right+1;
    while(l<r)
    {
        do l++;while(index>nums[l]);
        do r--;while(index<nums[r]);
        if(l<r)swap(nums[l],nums[r]);
    }
    quiksort(nums,left,r);
    quiksort(nums,r+1,right);
}
int main()
{   
    int n;
    scanf("%d", &n);
    for(int i=0;i<n;++i)
    {
        scanf("%d",&nums[i]);
    }
    quiksort(nums,0,n-1);
    for(int j=0;j<n;++j)
    {
        printf("%d ",nums[j]);
    }
    return 0;
}


五,小结


这题属于难者不会、会者不难,主要考察了快速排序的实现,没有其他的运用,所以属于简单题。

相关文章
|
3月前
|
搜索推荐 C语言
排序算法--冒泡排序
排序算法--冒泡排序
26 0
|
7月前
|
搜索推荐 算法 Java
Java中的快速排序、归并排序和堆排序是常见的排序算法。
【6月更文挑战第21天】Java中的快速排序、归并排序和堆排序是常见的排序算法。快速排序采用分治,以基准元素划分数组并递归排序;归并排序同样分治,先分割再合并有序子数组;堆排序通过构建堆来排序,保持堆性质并交换堆顶元素。每种算法各有优劣:快排平均高效,最坏O(n²);归并稳定O(n log n)但需额外空间;堆排序O(n log n)且原地排序,但不稳定。
55 3
|
8月前
LowB三人组--选择排序原理和实现
LowB三人组--选择排序原理和实现
|
算法 Java
用Java实现冒泡排序和Arrays排序
用Java实现冒泡排序和Arrays排序
81 0
|
算法 Java
Arrays 的二分查找
Arrays 的二分查找
100 0
|
算法
算法初识---选择排序
一、算法内容 选择排序的内容比较简单,大体上说就是,先确定一个数字为最小,然后从他后面的数中来寻找是否有比他更小的数,如果有便将两者交换,这个过程完成后,第一个数字就以及被排好序,第一个数字为最小的,然后将第二个数字定为最小,再从它的后面找是否有比它小的,如果有,便和它交换,从而排好第二个数位,以此类推直到将最后一个数排好。
80 0
|
搜索推荐 Java
java最简单的三种排序问题(冒泡排序、选择排序、快速排序)
java最简单的三种排序问题(冒泡排序、选择排序、快速排序)
141 0
|
人工智能 搜索推荐 算法
排序算法---归并排序
排序算法---归并排序
98 0
排序算法---归并排序
|
搜索推荐
排序算法--选择排序
排序算法--选择排序
77 0
|
搜索推荐 算法 Java
冒泡排序-选择排序-插入排序-快速排序(java版实现)(上)
排序就是将输入的数字按照从小到大的顺序进行排列。由于排序是一个比较基础的问题,所以排序算法的种类也比较多。最近学习了几种常见的排序算法,下面介绍如何使用java代码实现对数组进行从下到大排序。
184 0
冒泡排序-选择排序-插入排序-快速排序(java版实现)(上)

热门文章

最新文章

下一篇
开通oss服务