464 整数排序Ⅱ

原题网址:https://www.lintcode.com/problem/sort-integers-ii/description

描述

给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。

您在真实的面试中是否遇到过这个题?  是

样例

给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]

标签

排序

快速排序

归并排序

思路1:用快排序,挖坑填数+分治法(递归)。

参考:白话经典算法系列之六 快速排序 快速搞定

快速排序

AC代码:

class Solution {
public:
    /**
     * @param A: an integer array
     * @return: nothing
     */
    void sortIntegers2(vector<int> &A) {
        // write your code here
    int size=A.size();
    if (size==0)
    {
        return ;
    }
    qSort(A,0,size-1);
    }

    void qSort(vector<int> &A,int l,int r)
{
    if (l>=r)
    {
        return ;
    }
    int x=A[l];//A[l]基准,也就是第一个坑;
    int i=l,j=r;
    while(i<j)
    {
        //从右向左找小于x的数,填入坑中;
        while(i<j&&A[j]>=x)
        {
            j--;
        }
        if (i<j)
        {
            A[i]=A[j];//A[j]填入坑中,j处形成新的坑;
            i++;
        }
        //从左向右找大于等于x的数,填入坑中;
        while(i<j&&A[i]<x)
        {
            i++;
        }
        if (i<j)
        {
            A[j]=A[i];//A[i]填入坑中,i处形成新的坑;
            j--;
        }
    }
    //循环结束时,i==j,将x填入坑中;
    A[i]=x;
    //递归;
    qSort(A,l,i-1);
    qSort(A,i+1,r);
}
};

其他排序算法可参考:常见排序算法C++总结

原文地址:https://www.cnblogs.com/Tang-tangt/p/9241204.html

时间: 2024-10-12 19:36:34

464 整数排序Ⅱ的相关文章

C/C++算法竞赛入门经典Page11 例题1-5 三整数排序

题目:输入3个整数,从小到大排序后输出 样例输入: 20 7 33 样例输出: 7 20 33 首先,先声明三个整数a,b,c和一个临时变量t: int a,b,c,t;//1,b,c为三个整数,t为临时变量 输入三个整数: scanf("%d%d%d",&a,&b,&c); 进行3次if判断: 1.如果b>a,则a,b对调 2.如果c>a,则a,c对调 3.如果c>b,则b,c对调 代码: if(b>=a){ t=b; b=a; a=t

sort()使整数排序

sort()方法可将数组升序排序,但它是把数组的值转化为字符串后在排序的, 如 var a = [1,12,3,8,123] a.sort()  结果 1,12,123,3,8 和我们想要的结果不一样,解决方法, function compare(value1, value2) { return value1 - value2; } var values = [1,12,3,8,123]; values.sort(compare); alert(values); //1,3,8,12,123 如

1487 大批整数排序

个人博客:doubleq.win 1487 大批整数排序 时间限制: 3 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description !!!CodeVS开发者有话说: codevs自从换了评测机,新评测机的内存计算机制发生变化 计算内存的时候会包括栈空间 swap空间 这题的2M是单指内存空间... 十分十分抱歉 抱歉 !!! 现在有一大批(总数不超过10000000个)1到10之间的整数,现在请你从小到大进行排序输出. (测试数据将超过11MB.)

[华为上机练习题]6.整数排序

题目 描述: 实现输入一组大于等于0的整数,根据从小到大的顺序排序后输出,排序后有连续数时,只输出连续数中最小和最大的两个数. 题目类别: 排序 难度: 高级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 一组大于等于0的整数,不考虑非法输入,各个整数之间以逗号(",")分隔, 输入字符串的总长度小于等于100个字节. 输出: 排序后的值,各个整数之间以空格分隔. 样例输入: 1,4,3,110,2,90,7 样例输出: 1 4 7 90 110

codeup-大整数排序

Problem E: 大整数排序 Time Limit: 1 Sec  Memory Limit: 32 MBSubmit: 433  Solved: 198[Submit][Status][Web Board][Creator:Imported] Description 对N个长度最长可达到1000的数进行排序. Input 输入第一行为一个整数N,(1<=N<=100).接下来的N行每行有一个数,数的长度范围为1<=len<=1000.每个数都是一个正数,并且保证不包含前缀零.

codevs 1487 大批整数排序(水题日常)

时间限制: 3 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description !!!CodeVS开发者有话说: codevs自从换了评测机,新评测机的内存计算机制发生变化 计算内存的时候会包括栈空间 swap空间 这题的2M是单指内存空间... 十分十分抱歉 抱歉 !!! 现在有一大批(总数不超过10000000个)1到10之间的整数,现在请你从小到大进行排序输出. (测试数据将超过11MB.) 输入描述 Input Description 第一行表示将下排序

LintCode 整数排序

题目:给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法. 1.冒泡:从头开始,比较相邻的两个元素,大的放在后面.一轮结束之后,最大的数沉底,不参与下一轮比较.重复 直至待排序的元素个数为1. class Solution { public: /*** @param A an integer array @return void*/ void sortIntegers(vector<int>& A) {                     

华科机考:大整数排序

时间限制:1秒  空间限制:32768K 题目描述 对N个长度最长可达到1000的数进行排序. 输入描述: 输入第一行为一个整数N,(1<=N<=100). 接下来的N行每行有一个数,数的长度范围为1<=len<=1000. 每个数都是一个正数,并且保证不包含前缀零. 输出描述: 可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行. 输入例子: 3 11111111111111111111111111111 22222222222222

codevs 1487 大批整数排序

!!!CodeVS开发者有话说: codevs自从换了评测机,新评测机的内存计算机制发生变化 计算内存的时候会包括栈空间 swap空间 这题的2M是单指内存空间... 十分十分抱歉 抱歉 !!! 现在有一大批(总数不超过10000000个)1到10之间的整数,现在请你从小到大进行排序输出. (测试数据将超过11MB.) 输入描述 Input Description 第一行表示将下排序的个数N: 第2行到最后一行,每行一个数,表示有待排序的数(均是1-10之间的数,含1和10) (注:最后有一空行