MikanseIA @ 2024-11-18 20:57:59
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void swap(int arr[] , int x , int y) {
int t = arr[x]; arr[x] = arr[y]; arr[y] = t;
}
void sort(int arr[] , int left , int right) {
if(right <= left) return;
int lt = left + 1, gt = right , i = left + 1;
int random_index = left + rand() % (right - left + 1);
swap(arr,left,random_index);
int pivot = arr[left];/*lt = less than gt = greater than*/
while(i <= gt) {
if(arr[i] == pivot) i++;
else if(arr[i] > pivot) {
swap(arr,gt,i); gt--;
}
else {
swap(arr,lt,i); lt++; i++;
}
}
swap(arr,left,lt - 1);
sort(arr,left,lt - 2); sort(arr,gt + 1,right);
}
int main() {
int n,k; int *nums;
scanf("%d%d",&n,&k);
nums = (int*)malloc(sizeof(int) * n);
for(int i = 0 ; i < n ; i++) scanf("%d",&nums[i]);
sort(nums,0,n - 1);
printf("%d",nums[k]);
free(nums);
}
by ZMQ_Ink6556 @ 2024-11-18 21:15:30
@MikanseIA 这题不是让你练习 quick-3 sort 的,常数复杂度不可忽略,如果想要练习,可以来这里。C++ 内置的 sort()
函数就有大量的优化,所以才不会导致 TLE 的发生。
by ZMQ_Ink6556 @ 2024-11-18 21:18:35
@MikanseIA sort 是这个样子的,绝对不是短短几行代码能够做到的优秀复杂度 桶排序除外。
by MikanseIA @ 2024-11-18 22:53:56
@ZMQ_Ink6556谢谢!