快速排序O(nlong)

 1 #include<bits/stdc++.h>
 2 #define N 100010
 3 using namespace std;
 4 
 5 int n;
 6 int a[N];
 7 void qsort(int l,int r) {
 8     if(l>=r) return;
 9     int i=l,j=r,flag=a[l+r>>1];
10     do {
11         while(a[i]<flag) i++;
12         while(flag<a[j]) j--;
13         if(i<=j) swap(a[i++],a[j--]);
14     } while(i<=j);
15     qsort(l,j),qsort(i,r);
16 }
17 int main() {
18     cin>>n;
19     for(int i=1; i<=n; i++) cin>>a[i];
20     qsort(1,n);
21     for(int i=1; i<=n; i++) cout<<a[i]<<" ";
22     return 0;
23 }
View Code

快排求第k小数O(n)

 1 #include<bits/stdc++.h>
 2 #define N 5000010
 3 using namespace std;
 4 
 5 int n,k,ans;
 6 int a[N];
 7 void kth(int l,int r) {
 8     if(l==r) {
 9         ans=a[l];
10         return;
11     }
12     int i=l,j=r,mid=a[l+r>>1];
13     do {
14         while(a[i]<mid) i++;
15         while(mid<a[j]) j--;
16         if(i<=j) swap(a[i++],a[j--]);
17     } while(i<=j);
18     if(k<=j) kth(l,j);
19     else if(i<=k) kth(i,r);
20     else kth(j+1,i-1);
21 }
22 int main() {
23     cin>>n>>k;
24     k++;
25     for(int i=1; i<=n; i++) scanf("%d",&a[i]);
26     kth(1,n);
27     cout<<ans<<endl;
28     return 0;
29 }
View Code

nth_element求第k小数

posted on 2022-04-22 19:06  我疯故我在  阅读(35)  评论(0)    收藏  举报