使用快速排序,求最大的k个数
来源:互联网 发布:生日祝福网站源码 编辑:程序博客网 时间:2024/06/05 14:41
使用选择排序的思想:时间复杂度o(n*k)
#include<iostream>using namespace std;void selectMax(int arr[],int n,int k){for(int j = 0; j < k; ++j){for(int i = 0; i < n - j - 1; ++i){if(arr[i] > arr[i + 1])swap(arr[i],arr[i + 1]);}}}void selectSort(int arr[],int n){for(int i = 0; i < n - 1; ++i){for(int j = 0; j < n - i - 1; ++j){if(arr[j] > arr[j + 1])swap(arr[j],arr[j + 1]);}}}void swap(int &a,int &b){int temp = a;a = b;b = temp;}int main(void){int arr[] = {3, 5, 4, 8, 9, 10, 1, 2};//selectSort(arr,8);selectMax(arr,8,2);//最的两个数位于数组的最后。for(int i = 0; i < 8; ++i){cout<<arr[i]<<endl;}system("pause");return 0;}
快速排序的思想解决。o(n*logk)
#include<iostream>using namespace std;int partition(int arr[],int p,int r)//每一次划分所产生的结果{int x = arr[r];//选择末尾元素作为枢轴int i = p -1;for(int j = p; j < r; ++j){if(arr[j] > x){i++;swap(arr[i],arr[j]);}}swap(arr[i + 1],arr[r]);return i + 1;}//begin代表开始的位置,end代表的结束的位置,k为最大的k+1个数void kBig(int arr[],int begin,int end,int k){int i = partition(arr,begin,end);if(k == i)//如果划分的结果刚好为枢轴所在的位置,则返回return;else if(k > i)//如果枢轴的位置小于k,则递归的进入右区域{kBig(arr,i + 1,end,k);}else//否则进入左区域{kBig(arr,begin,i - 1,k);}}int main(void){int arr[] = {2, 8, 7, 1, 3, 5, 6, 4, 11, 13, 14, 15, 19, 16, 20, 21, 78, 32, 100, 10};partition(arr,0,7);kBig(arr,0,19,4);for(int i = 0; i < 20; ++i){cout<<arr[i]<<endl;}system("pause");return 0;}
0 0
- 使用快速排序,求最大的k个数
- 用快速排序的思想求第K大的数或最大的k个数
- 编程之美--求最大的K个数(快速排序原理实现)
- 基于快速排序思想求,数组最大的k个数,数组中出现次数超过一半的数,数组中最大的k个数
- N个数求最大的k个数
- 求数组中最大的k个数
- 求数组中最大的K个数
- 求数组的最大K个数
- 求连续K个数的和最大
- 求n个数中第k大的数、前K大的数、快速排序
- Python笔试题目:求最大的K个数子,解法一,最快速实现的方法
- 求n个数中最大的k个数
- 利用K-堆求最大的K个数
- 快速排序&半快速排序思想求n个无序数中第k或者前k个数
- 求n个数中第k大的数、快速排序
- 最大的k个数
- 最大的K个数
- 最大的k个数
- uestc data structure D - 秋实大哥与战争
- Qt Creator异常崩溃停止工作
- selinux第一节
- 设计模式相关
- Protocol Buffers(Protobuf)开发者指南---概览
- 使用快速排序,求最大的k个数
- 关于bitbucket和github的key问题
- Android WebRTC 音视频开发总结(一)
- primaryConstrains And uniqueConstraints
- XUtil学习之ResLoader(五)
- java7 文件监听器
- GridView的使用
- 统计iOS项目的总代码行数方法
- UVA 424 解题报告