快速选择算法的一个简单实现
2012-10-02 16:24
405 查看
#include<stdio.h>//交换两个元素void swap(int *a, int *b){int temp;temp = *a;*a = *b;*b = temp;}//三数取中void median3(int a[], int left, int right){int middle = (left+right)/2;if(a[left]>a[middle])swap(&a[left], &a[middle]);if(a[left]>a[right])swap(&a[left], &a[right]);if(a[middle]>a[right])swap(&a[middle],&a[right]);swap(&a[left], &a[middle]);}
//划分(快速排序思想)int partition(int a[], int left, int right){if(left<=right){int i = left;int j = right;int temp = a[left];while(i<j){while(i<j&&a[j]>temp){j--;}swap(&a[i], &a[j]);while(i<j && a[i]<temp)i++;swap(&a[i], &a[j]);}a[i] = temp;return i;}}
//快速选择算法
int quickSelecting(int a[], int left, int right, int k){if(left<=right){median3(a, left, right);int position = partition(a,left,right);if(k-1 == position)return a[position];else if(k-1 < position)quickSelecting(a,left,position-1,k);else if(k-1 > position)quickSelecting(a,position+1,right,k);}}int main(){int a[10] = {8, 1, 4 ,9, 6, 3, 5, 2, 7, 0};int k;printf("input the value of k:\n");scanf("%d",&k);int result = quickSelecting(a,0,9,k);printf("the result is %d\n",result);return 1;}
相关文章推荐
- 基本算法简单实现-二分法查找、合并排序、冒泡排序、插入排序、选择排序、快速排序
- 数据算法一个项目中的STL类型的选择和算法实现
- 实现了一个压缩算法,在数据高度压缩的前提下,还可以快速查找 key
- 使用Python语言写一个简单的KMP模式匹配算法实现
- 一个简单最大正向匹配(Maximum Matching)MM中文分词算法的实现
- [分治]快速选择算法 C++实现
- 简单算法 - 两个队列实现一个栈
- 实现了一个压缩算法,在数据高度压缩的前提下,还可以快速查找 key
- Objective-C ,ios,iphone开发基础:快速实现一个简单的图片查看器
- (数据结构排序的实验四)快速,冒泡,简单选择,直接插入排序的c语言实现!!
- Android 快速实现一个文件选择器
- 快速实现一个简单的bigpipe模型
- 一个项目中的STL类型的选择和算法实现
- 实现一个简单的网页(缩略词表、文献来源链接、快速访问键列表)
- 一个简单的随机数生成算法实现(C++)
- 排序:简单排序算法实现:冒泡,选择,插入
- 算法 -- iOS开发用Objective_C / Swift3.0实现:快速排序 / 冒泡排序 / 选择排序
- Opnet 一个简单的网络实现Dijkstra最短路径算法,路径代价为跳数加排队延时
- 怎样编写一个程序,把一个有序整数数组放到二叉树中? 编写实现链表排序的一种算法。说明为什么你会选择用这样的方法?
- 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)