期望为线性时间的选择算法(c语言)
来源:互联网 发布:matlab2017b mac 破解 编辑:程序博客网 时间:2024/04/27 16:18
#include<stdio.h>#include<stdlib.h>#include<time.h>int RANDOMIZED_SELECT(int a[],int p,int r,int i);int RANDOMIZED_PARTITION(int a[],int p,int r);int PARTITION(int a[],int p,int r);void swap(int *a,int *b);int RANDOM(int p,int q);int main(){ int a[] = {10,9,8,7,6,5,4,3,2,1}; int i = 3; printf("第%d小:%d\n",i,RANDOMIZED_SELECT(a,0,9,i)); return 0;}void swap(int *a,int *b){ int temp; temp = *a; *a = *b; *b = temp;}int RANDOM(int p,int q){ int i,number; srand((unsigned)time(NULL)); number = rand()%(q-p+1)+p; //因为rand%101是得到100以内的数,所以q-p+1 //万一p不从零开始,所以加上p return number;}int PARTITION(int a[],int p,int r)//快排的部分{ int x = a[r]; int i = p- 1; for(int j = p;j<=r-1;j++) { if(a[j] <= x) { i = i + 1; swap(&a[j],&a[i]); } } swap(&a[i+1],&a[r]); return i+1;}int RANDOMIZED_PARTITION(int a[],int p,int r)//随机交换数字{ int i = RANDOM(p,r); swap(&a[r],&a[i]); return PARTITION(a,p,r);}int RANDOMIZED_SELECT(int a[],int p,int r,int i)//选择算法核心{ if(p == r) return a[p]; int q = RANDOMIZED_PARTITION(a,p,r); int k = q - p + 1;//证明a[q]之前有几个数字比它小 if(i == k)//如果刚好等于i,输出 return a[q]; else if(i < k)//如果i比k小,证明要找的元素在低区 return RANDOMIZED_SELECT(a,p,q-1,i); else //找的元素在高区 return RANDOMIZED_SELECT(a,q+1,r,i-k); //因为a[q]已经是前面第k个小的,所以在后面就是i-k小}
阅读全文
0 0
- 期望为线性时间的选择算法(c语言)
- 期望时间为线性时间的选择算法(C++)
- 期望为线性时间的选择算法
- 期望为线性时间选择算法
- 期望为线性时间的选择算法randomizedSelect
- Java 期望为线性时间的选择算法
- CLRS 9.2期望为线性时间的选择算法
- 线性期望时间选择问题C语言
- 线性期望时间选择问题C语言
- 算法导论程序19-期望为线性时间的选择算法(Python)
- 选择问题的线性期望时间算法
- 期望为线性的选择算法
- 小白进阶之期望为线性时间的选择算法
- 算法之分治——期望线性时间的选择(基础版本的选择)
- 算法导论:第9章 中位数和顺序统计量_1期望为线性时间的选择算法
- 期待为线性时间的选择算法
- 期望线性时间选择
- 算法--顺序统计-期望线性时间做选择
- c语言练习题2
- 面对分治算法,看这两道题就够了
- CCF CSP 2017年3月第2题 学生排队(STL运用)
- 如何将cloud9的项目push到trustie的版本库中
- 1019. 数字黑洞 (20)
- 期望为线性时间的选择算法(c语言)
- linux学习之yum介绍
- BroadcastReceiver源码分析系列(二):发送和接收广播
- 实验三 模拟饭堂排队打饭管理软件(循环队列实现)
- JAVA学习笔记-05
- java maven poi 读取excel表格
- 第五周 项目1 建立顺序栈算法库
- 数据库操作命令集锦
- 【安全牛学习笔记】Kali Linux基本工具