Chinaunix首页 | 论坛 | 博客
  • 博客访问: 533412
  • 博文数量: 129
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1888
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-20 11:09
文章分类

全部博文(129)

文章存档

2016年(1)

2015年(5)

2014年(64)

2013年(59)

我的朋友

分类: C/C++

2013-11-26 21:13:46

问题:有一个整数数组,请求出两两之差绝对值最小的值,记住,只要得出最小值即可,不需要求出是哪两个数。

我的思路:两个数要想差的绝对值最小,肯定是需要两个数大小相近。故有:先将整数数据进行排序,耗时o(N*logN);然
然后遍历一遍,相邻的数相减,记录绝对值最小的数。总耗时为:O(N*logN).
实现代码如下:
  
  1. //快速排序
  2. #include<iostream>
  3. using namespace std;


  4. //以最小元为主元
  5. int Partion1(int *arr,int low,int high)
  6. {
  7.     int key=arr[low];
  8.     while(low<high)
  9.     {
  10.      while(low<high && arr[high]>=key)
  11.             high--;
  12.         arr[low]=arr[high];
  13.         while(low<high && arr[low]<=key)
  14.             low++;
  15.         arr[high]=arr[low];
  16.     }
  17.     arr[low]=key;
  18.     return low;
  19. }

  20. //以最大元为主元
  21. int Partion2(int *arr,int low,int high)
  22. {
  23.     int key=arr[high];
  24.     while(low<high)
  25.     {
  26.      while(low<high && arr[low]<=key)
  27.             low++;
  28.         arr[high]=arr[low];
  29.         while(low<high && arr[high]>=key)
  30.             high--;
  31.         arr[low]=arr[high];
  32.     }
  33.     arr[high]=key;
  34.     return high;
  35. }


  36. void QSort(int *arr,int low,int high)
  37. {
  38.     if(low<high)
  39.     {
  40.         int pivoc=Partion1(arr,low,high);
  41.         
  42.      QSort(arr,low,pivoc-1);
  43.      QSort(arr,pivoc+1,high);
  44.     }
  45. }


  46. void QuickSort(int *arr,int low,int high)
  47. {
  48.     QSort(arr,low,high);
  49. }



  50. int main()
  51. {
  52.     int i;
  53.     int min=65535;
  54.     int a[9]={-1,-1,-1,-1,-1,-2,0,-98,100};
  55.     QuickSort(a,0,8);
  56.     for(i=0;i<9;i++)
  57.         printf("%d ",a[i]);
  58.     cout<<endl;
  59.     for(i=0;i<8;i++)
  60.     {
  61.      int tmp=a[i]-a[i+1];
  62.         if(tmp<0)
  63.             tmp=(-1)*tmp;
  64.         if(tmp<min)
  65.             min=tmp;
  66.     }
  67.     cout<<min<<endl;

  68.     return 0;
  69. }

结果如下:
  

等待更高效的算法。。。。
阅读(1446) | 评论(0) | 转发(1) |
0

上一篇:遍历二叉树的操作

下一篇:C语言的谜题

给主人留下些什么吧!~~