![]() |
#2
rjsp2020-12-21 16:25
调用标准函数行不?
![]() #include <iostream> #include <algorithm> #include <random> //using namespace std; int main( void ) { int arr[20]; // a) 产生一个20个随机数组成的数组,编写快速排序算法完成这些数从小到大排序,并将排序后结果输出 { std::generate( std::begin(arr), std::end(arr), [mt=std::mt19937{std::random_device{}()},dis=std::uniform_int_distribution<>(0,99)]()mutable{return dis(mt);} ); std::sort( std::begin(arr), std::end(arr) ); std::copy( std::begin(arr), std::end(arr), std::ostream_iterator<decltype(*arr)>(std::cout," ") ); std::cout << std::endl; } // b) 输入其中任何一个数字,编写折半查找算法查找该元素在排序后数组中的位置 { std::remove_cvref_t<decltype(*arr)> n; if( !(std::cin>>n) ) return 1; auto p = std::lower_bound( std::begin(arr), std::end(arr), n ); if( p==std::end(arr) || *p!=n ) std::cout << "没发现.\n"; else std::cout << std::distance(std::begin(arr),p) << std::endl; } // c) 利用分治法求解这组数中的top n元素,既是这组数中第n(n<20)大的数据 // 这就奇怪了呀,数组已经排序好了,第i大元素就是 arr[20-1-i] 呀 // 好吧,假设我就当数组没排序过 { size_t n; if( !(std::cin>>n) || n>=std::size(arr) ) return 1; std::nth_element( std::begin(arr), std::next(std::begin(arr),std::size(arr)-1-n), std::end(arr) ); std::cout << arr[std::size(arr)-1-n] << std::endl; } } |
(1). 设计一个程序,完成以下功能:
a) 产生一个20个随机数组成的数组,编写快速排序算法完成这些数从小到大排序,并将排序后结果输出;(最好能打印每轮排序结果)
b) 输入其中任何一个数字,编写折半查找算法查找该元素在排序后数组中的位置;
c) 利用分治法求解这组数中的top n元素,既是这组数中第n(n<20)大的数据。