分治法 前m大的數

2021-08-07 13:42:56 字數 1106 閱讀 5558

給定乙個陣列包含n個元素,統計前m大的數並且把這m個數從大到小輸

出如果先排序再找前m大的,時間複雜度為o(nlogn)

用分治處理:複雜度 o(n+mlogm)

思路:把前m大的都弄到陣列最右邊,然後對這最右邊m個元素排序,

再輸出

關鍵 :o(n)時間內實現把前m大的都弄到陣列最右邊

/*

如何將前k大的都弄到最右邊

1)設key=a[0], 將key挪到適當位置,使得比key小的元素都在

key左邊,比key大的元素都在key右邊(線性時間完成)

2) 選擇陣列的前部或後部再進行 arrangeright操作

*/#include

#include

using

namespace

std;

//設k為a[0],將比k大的挪到k右邊,返回k的位置下標

int quickarray(int a,int first,int end)

if(iwhile(iif(ireturn i;

}//對前m大的數快速排序,也可以用系統自帶的 qsort() ,o(nlogn)

void quicksort(int a,int first,int end)

}//分治法:將k兩邊的數分配好,時間複雜度o(n)

前m大的數

total submission s 13762 accepted submission s 4693 problem description 還記得gardon給小希布置的那個作業麼?上次比賽的1005 其實小希已經找回了原來的那張數表,現在她想確認一下她的答案是否正確,但是整個的答案是很龐大的表...

前m大的數

a 前m大的數 sort time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description 還記得gardon給小希布置的那個作業麼?上次比賽的1005 其實小希已經找回了原來的那張數表,...

前m大的數

hpu2017 sort 結構體練習 virtual judge 還記得gardon給小希布置的那個作業麼?上次比賽的1005 其實小希已經找回了原來的那張數表,現在她想確認一下她的答案是否正確,但是整個的答案是很龐大的表,小希只想讓你把答案中最大的m個數告訴她就可以了。給定乙個包含n n 3000...