c++ - 数组中的最小差异

标签 c++ algorithm

我想找到数组所有元素之间的最小差异。我通读了其他各种问题,但无法在以下代码中找到错误的确切来源。

#include<iostream>
#include<stdio.h>
#include<cstdlib>

using namespace std;

void quicksort(long int *lp, long int *rp);

int main()
{
    int t,n;
    long int s[5000];

    cin>>t;
    while(t--){
    cin>>n;
    for(int i=0;i<n;i++) cin>>s[i];
    quicksort(&s[0],&s[n-1]);
    //cout<<"passes:"<<passes<<endl;
    //for(int i=0;i<n;i++) cout<<s[i]<<" ";
    long int min = abs(s[1]-s[0]);
    //cout<<endl<<min;
    for(int i=1;i<(n-1);i++){
        long int temp = abs(s[i]-s[i+1]);
        if (temp <= min) min = temp;
    }
    cout<<min;
    }
}

void quicksort(long int *lp,long int *rp){
    int arraysize= (rp-lp)+1;
    if(arraysize > 1){
       long int *pivot = (lp+(arraysize/2));
       long int swap=0;
      long int *orgl = lp;
      long int *orgr = rp;
      while(lp!=rp){
        while (*lp < *pivot) lp++;
        while (*rp > *pivot) rp--;
        if (lp == pivot) pivot=rp;
        else if (rp == pivot) pivot=lp;
        swap = *lp;
        *lp = *rp;
        *rp = swap;
        if((*lp == *pivot) || ( *rp == *pivot)) break;
    }
    quicksort(orgl,pivot-1);
    quicksort(pivot+1,orgr);
}

此链接中给出了问题陈述:http://www.codechef.com/problems/HORSES 你能找出我程序中的错误吗?

最佳答案

您使用的是 C++,因此与其使用您自定义的快速排序,这并不能真正保证 O(n*logn),您最好使用从 <algorithm> 开始的排序。 . 这个逻辑看起来不错:

    long int min = abs(s[1]-s[0]);
    //cout<<endl<<min;
    for(int i=1;i<(n-1);i++){
        long int temp = abs(s[i]-s[i+1]);
        if (temp <= min) min = temp;
    }

By the way: 
cout<<min; 
Add cout<<min << endl;

关于c++ - 数组中的最小差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12505426/

相关文章:

c - 哪个更可能浪费更少的内存,一个大内存管理器还是几个小内存管理器?

algorithm - 在 Scala 中实现成对线性距离

c++ - 使用对象表达式在构造函数中调用虚函数

c++ - 使用 MPI 进行 Valgrind+gdb 调试,库中出现错误?

以最低代价遍历无向带权图的k个节点(并返回原​​点)的算法

algorithm - 最小的硬币变化(有限供应)具有更好的时间复杂度讨论

algorithm - 如何按顺序标记列表列表?

c++ - 将具有公共(public)头文件的目标文件链接到 main 会给出体系结构 x86_64 错误的重复符号

c++ - 如何获取资源文件中的数据?

c++ - 传递参数以增强精神自定义解析器