关注
对了,那个第四个问题有O(N)的解法,是快速选择的思想
下面是我实现的代码
#include <iostream>
using namespace std;
#define MAX_SIZE 2001
//int a[2001];
void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int partition(int a[], int low, int high)
{
int privotKey = a[low]; //基准元素
while (low < high){ //从表的两端交替地向中间扫描
while (low < high && a[high] >= privotKey) --high; //从high 所指位置向前搜索,至多到low+1 位置。将比基准元素小的交换到低端
swap(&a[low], &a[high]);
while (low < high && a[low] <= privotKey) ++low;
swap(&a[low], &a[high]);
}
//a[low] = privotKey;
return low;
}
void Top100(int a[], int k,int start,int end){
int i = start;
int j = end - 1;
int index = partition(a, i, j);
while (index!=end-k-1) //数组后100
{
if (index<end - k - 1)
{
i = ++index;
index = partition(a, i, j);
}
else
{
j = index;
index = partition(a, i, j);
}
}
}
int main()
{
int a[] = { 1111, 22222, 3333, 4, 5, 6, 7, 8,9 ,10};
Top100(a, 3, 0, 10);
for (int i = 0; i <10 ; i++)
{
cout << a[i]<<endl;
}
return 0;
}
查看原帖
点赞 1
相关推荐
牛客热帖
更多
正在热议
更多
# 实习生的蛐蛐区 #
45956次浏览 356人参与
# 夸夸我的求职搭子 #
199779次浏览 1917人参与
# 你认为小厂实习有用吗? #
16825次浏览 211人参与
# 三一重工求职进展汇总 #
12990次浏览 60人参与
# 应届生,你找到工作了吗 #
19309次浏览 144人参与
# 硬件应届生薪资是否普遍偏低? #
75038次浏览 518人参与
# 说说你知道的学历厂 #
32087次浏览 189人参与
# 计算机有哪些岗位值得去? #
14852次浏览 142人参与
# 下班后的时间你怎么安排 #
8798次浏览 129人参与
# 材料人,你们签了哪个公司 #
7164次浏览 17人参与
# 你找工作的时候用AI吗? #
16319次浏览 206人参与
# 面试尴尬现场 #
27645次浏览 185人参与
# 哪一瞬间觉得自己长大了 #
8105次浏览 183人参与
# 在职场上,你最讨厌什么样的同事 #
14887次浏览 151人参与
# 社会教会你的第一课 #
32063次浏览 420人参与
# 中核求职进展汇总 #
20477次浏览 152人参与
# 电网笔面经互助 #
36487次浏览 354人参与
# 简历当中有水分算不算造假? #
25808次浏览 380人参与
# 神州信息工作体验 #
16389次浏览 75人参与
# 学历贬值真的很严重吗? #
22241次浏览 162人参与