设计算法求数组中相差最小的两个元素(称为最接近数)的差。
C++实现
#include<iostream>
using namespace std;
int Partition(int r[],int first,int end)
{
int i=first,j=end;
while(i<j)
{
while(i<j&&r[i]<=r[j]) j--;
if(i<j)
{
int temp=r[i];
r[i]=r[j];
r[j]=temp;
i++;
}
while(i<j&&r[i]<=r[j]) i++;
if(i<j)
{
int temp=r[i];
r[i]=r[j];
r[j]=temp;
j--;
}
}
return i;
}
void QuickSort(int r[],int first,int end)
{
int pivot;
if(first<end)
{
pivot=Partition(r,first,end);
QuickSort(r,first,pivot-1);
QuickSort(r,pivot+1,end);
}
}
int main()
{
int n,r[1000];
cin>>n;
for(int i=0;i<n;i++)
cin>>r[i];
QuickSort(r,0,n-1);
for(int i=0;i<n;i++)
r[i]=r[i+1]-r[i];
int min=r[0],j=-1;
for(int i=1;i<n-1;i++)
if(r[i]<min)
min=r[i];
cout<<"最接近数的差为:"<<min;
}
Java实现
import java.util.*;
public class QuickSort {
static int Partition(int r[],int first,int end)
{
int i=first,j=end;
while(i<j)
{
while(i<j&&r[i]<=r[j]) j--;
if(i<j)
{
int temp=r[i];
r[i]=r[j];
r[j]=temp;
i++;
}
while(i<j&&r[i]<=r[j]) i++;
if(i<j)
{
int temp=r[i];
r[i]=r[j];
r[j]=temp;
j--;
}
}
return i;
}
static void QuickSort(int r[],int first,int end)
{
int pivot;
if(first<end)
{
pivot=Partition(r,first,end);
QuickSort(r,first,pivot-1);
QuickSort(r,pivot+1,end);
}
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int r[]=new int [1000];
int n,i;
n=in.nextInt();
for(i=0;i<n;i++)
r[i]=in.nextInt();
QuickSort(r,0,n-1);
//int min=r[1]-r[0];
//for(i=1;i<n-1;i++)
// if((r[i+1]-r[i])<min)
// min=r[i+1]-r[i];
for(i=0;i<n-1;i++)
r[i]=r[i+1]-r[i];
int min=r[0];
for(i=1;i<n-1;i++)
if(min>r[i])
min=r[i];
System.out.println("最接近的数的差为:"+min);
}
}