《算法分析》作业6 1. 问题 2. 解析 3. 设计 4.分析 5.源码

     求一个数组中第K小的元素。

2. 解析

《算法分析》作业6
1. 问题
2. 解析
3. 设计
4.分析
5.源码

 《算法分析》作业6
1. 问题
2. 解析
3. 设计
4.分析
5.源码

 《算法分析》作业6
1. 问题
2. 解析
3. 设计
4.分析
5.源码

 《算法分析》作业6
1. 问题
2. 解析
3. 设计
4.分析
5.源码

 《算法分析》作业6
1. 问题
2. 解析
3. 设计
4.分析
5.源码

3. 设计

核心代码:

 1 int select(int num[],int p,int r,int k){
 2     int len=r-p+1;
 3     //当前小于等于五个元素直接排序求第k小 
 4     if(len<=5){
 5         sort(num,num+len);
 6         return num[k-1];
 7     }else{
 8         //将数组分组,五个一组
 9         int group=len/5;
10         int m=len-group*5; //剩下的元素赋值给m
11         rep(i,0,group-1){ //分组排序 
12             sort(num+i*5,num+i*5+5);
13             mid[i]=num[i*5+2];
14         }
15         if(m>0){
16             sort(num+group*5,num+group*5+m);
17             mid[group]=num[group*5+m/2];
18             group++;
19         }
20         sort(mid,mid+group);
21         int mm=mid[group/2];
22         int len1=0,len2=0;
23         //用mm把数组分为s1和s2
24         rep(i,p-1,r-1){
25             if(num[i]<mm){
26                 s1[len1++]=num[i];
27             }else s2[len2++]=num[i];
28         }
29         int ans=0;
30         if(k==len1+1) ans=mm;
31         else if(k<=len1) ans=select(s1,1,len1,k);
32         else ans=select(s2,1,len2,k-len1);
33         return ans;
34     }
35 }

4.分析

《算法分析》作业6
1. 问题
2. 解析
3. 设计
4.分析
5.源码

《算法分析》作业6
1. 问题
2. 解析
3. 设计
4.分析
5.源码

 《算法分析》作业6
1. 问题
2. 解析
3. 设计
4.分析
5.源码

5.源码

https://github.com/xiaojunjun601/sfHomework1/blob/master/%E4%BB%A3%E7%A0%81/%E5%88%86%E6%B2%BB%E6%B3%95%E6%B1%82%E7%AC%ACK.cpp