選擇第n大的數

2021-10-01 21:53:18 字數 1418 閱讀 1925

借鑑快速排序演算法,返回每趟確定的乙個元素的位置,與n比較。在快速排序中使用隨機生成的樞軸,如果資料排列均勻,也可以選第乙個數作為樞軸。

//

// created by dgm on 2020/1/3.

//#include

#include

#include

using

namespace std;

int n;

int*a;

int k;

intpartation

(int left,

int right)

a[left]

=temp;

return left;

//返回樞軸元素的最終位置

}void

selectnum

(int left,

int right,

int k)

else

if(pos+

1else}}

intmain()

selectnum(0

,n-1

,k);

return0;

}

將乙個整數集合s劃分為兩個子集s1和s2,分別含有n1和n2個元素,s1與s2的並為s,交為空。要求:在|n1-n2|盡可能小的條件下,使s1元素的和與s2元素的和的差的絕對值即|s1-s2|盡可能大。

以前的做法:將s排序,求前一半和後一半的差。

現在的做法:如果樞軸元素恰好在中間位置,將樞軸元素及之前和之後的元素分別求和,然後作差取絕對值。

//

// created by dgm on 2020/1/3.

//#include

#include

#include

using

namespace std;

int n;

int*a;

int res=0;

intpartation

(int left,

int right)

a[left]

=temp;

return left;

}int

maxabs

(int left,

int right)

if(n%2==

1)res+

=abs

(a[n-1]

);//如果有奇數個元素,則兩個集合元素數目相差一

return res;

}else

if(pos1)

else}}

intmain()

printf

("%d\n"

,maxabs(0

,n-1))

;return0;

}

取出列表中第N大的數

array list range 10 random.shuffle array print array deffunc1 array,n d,k n while k 0 maxnum,maxindex float inf 0 for index,value in enumerate array i...

從M個數中選擇前N大的數

如果對m個數字全排列,1 用簡單排序演算法,例如氣泡排序,時間複雜度m m 2 用快速排序 最壞時間複雜度度蛻化為m m 堆排序歸併排序 平均時間負責度為m logm 此處,需要選擇前n大的數,用氣泡排序,迴圈次數為n,時間複雜度為m n 如果是海量資料呢?筆試時經常碰到這樣類似的題目 從100w個...

選擇第n大的數(分治法和排列實現)

個人心得 在買的書上看到的乙個經典分治題,題目意思就是給定乙個陣列,求第k小的數。第一反應就是排序,然後返回第k 1位置的數就可以了,這樣演算法的複雜度是nlongn,在快速排序的基礎下還是挺不錯的。不過為了學習分治法還是換種思路,這也是建立在快速排序的方法,因為快排是以第乙個作為標準,比他小的數在...