前言
已经开学,本篇贡献于第一次算法设计与分析课作业。
了解到此题是微软的面试题。
一.解题思路
- 排序求解,将数组中的元素进行排序,求解两个数之间的差值记录更新。
- 暴力求解 ,第一个元素和其他n-1个元素相比较,记录差值随时更新。第二个元素与其余n-2个算法比较,记录差值更新…显然最容易想到但是时间复杂度很高。
二.代码
1.伪代码
选择性能较好的快速排序作为排序方法。
quicksort(*a,left,right){
i=left j=right // 两个工作指针
if(i<j){
// 直至子表只有一元素(左=右) 排序结束
pivot=a[i] //将最左边的字作为比较的关键字
while(i != j){
//直至左右两个指针遇到 这一趟排序结束
while(a[j]>=pivotkey) j-- //先从右边向左找 直至找到一个比它小的数a[i]
while(a[i]<=pivotkey) i++ //再从左边向右找 直到找到一个比它大的a[j]
exchange a[i] <--> a[j]
}
exchange a[left] <--> a[i]
}
quicksort