有一个整数数组,请求出两两之差绝对值最小的值 绝对值最小的正整数是

//1、有一个整数数组,请求出两两之差绝对值最小的值

//方法1:两层for循环,求出每两个数之间的差的绝对值,再进行比较.算法时间复杂度:O(n^2)
//注意:若绝对值等于0,那么可以直接退出,因为绝对值等于0就是最小的了

#include <stdio.h>
#include <stdlib.h>
#define N 10
int minAbs(int *num);

void main()
{
int num[N] = {1,6,29,11,22,17,50,67,88,59};
int min;
min = minAbs(num);
printf("%d",min);
}

int minAbs(int *num)
{
int i,j;
int min,n;
min = abs(num[0] - num[1]);

for(i = 0;i < N;i++)
{
for(j = i+1;j <N;j++)
{
n =abs(num[i] - num[j]);
if(n ==0)
return0;
if(n< min)
{
min= n;
}
}
}
return min;
}

//方法2:对整个数组进行排序,需要O(n*logn)的时间。然后遍历一次数组,求相邻两个数之间的
//差的绝对值,若等于0,直接返回.需要O(n)的时间复杂度,总的时间复杂度需要O(n+n*logn)
//排序:用快排

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 10

int pattion(int num[],int p,int r);
void QuickSort(int num[],int p,int r);
int smallAbs(int *num);

void main()
{
int i;
int small;
int num[N] ={12,89,16,78,30,135,78,362,275,351};
QuickSort(num,0,N-1);
printf("经过快速排序之后数组如下:n");
for(i = 0;i < N;i++)
{
printf("]",num[i]);
}
printf("n");
small = smallAbs(num);
printf("数组中绝对值之差最小是]",small);
}

int pattion(int num[],int p,int r)
{
int i = p;
int j = r+1;
int x = num[p];
int temp;

while(1)
{
while(num[++i] <x);
while(num[--j] >x);
if(i >= j)
break;
temp = num[i];
num[i] = num[j];
num[j] = temp;
}
num[p] = num[j];
有一个整数数组,请求出两两之差绝对值最小的值 绝对值最小的正整数是
num[j] = x;
return j;
}

void QuickSort(int num[],int p,int r)
{
if(p < r)
{
int q = pattion(num,p,r);
QuickSort(num,p,q-1);
QuickSort(num,q+1,r);
}
}

int smallAbs(int *num)
{
int i,k;
int small = abs(num[0] - num[1]);
if(0 == small)
return 0;

for(i = 1;i < N;i++)
{
k = abs(num[i],num[i+1]);
if(k <small)
{
small =k;
if(0 ==small)
return0;
}
}
return small;
}

  

爱华网本文地址 » http://www.aihuau.com/a/25101015/278189.html

更多阅读

C#变长数组二 c 数组长度 变量

首先声明,这不是我写的,只是我看对你有用才贴上来的1、什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处:动态的增加和减少元素实现了IColle

C#的动态数组 c 动态数组的用法

在使用数组的过程中,有时候希望数组的长度和元素个数能随程序的运行不断改变,但改变一次就要重新开辟一个新的数组对象,这样将占用内存空间。为了解决这个问题,Microsoft.NET Framework 体统了一个ArrayList类,专门用于处理可按动态增减

有一个道理不用讲,战士就该上战场! 战士就该上战场

许三多:做有意义的事就是好好活,好好活就是做很多很多有意义的事。史今:只要今天比昨天好,这不就是希望吗?高城:日子就是问题叠着问题,要挺胸抬头去面对。老马:别混日子了,小心日子把你们给混了。袁朗:不要对没做过的事情说没有意义

指向数组的指针和指向指针的指针 c语言指向数组的指针

指向数组的指针:很多人以为“指向数组的指针”就是“指向指针的指针”,于是有人写这样的代码:int a[3][4];int **p = a;//错误  这个代码的错误之处在于a是一个数组,它的成员也是数组,所以a叫做“数组的数组”——C++中严格说来没有二

《家,N次方》薛之荔经典台词 家的n次方经典台词

1--所有敌对的开始就是一切悲剧的开始,无论任何时候,你在必须面对时候,你所选的的态度,其实就已经决定了整件事情的走向和结局。包容和接纳就会是祥和跟喜剧,挑剔和敌对就一定是争吵和悲剧。既然已经知道了结果是什么,那为什么不选择一个

声明:《有一个整数数组,请求出两两之差绝对值最小的值 绝对值最小的正整数是》为网友未婚男人分享!如侵犯到您的合法权益请联系我们删除