快速排序(3)的应用:选择

本文描述了一个快速排序的应用,用快速排序快速的选出数据中第k小的文件(元素)。

一个与排序有关但又不需要完全排序的应用是找出一组数的中间数的操作。寻找中间元素时选择操作的一个特例,即选择一组数中的第个最小元素。一种方法是对数据进行排序,,但我们可以使用快速排序的划分过程做的更好。

算法过程(寻找第k小的元素)程序实现递归实现选择算法(Item a[], int l, int r, int k) //递归实现{if(r <= l)return;int i = partation(a, l, r);if(k < i)select(a, l, i-1, k);else if(k > i)select(a, i+1, r, k);}非递归实现void select_2(Item a[], int l, int r, int k) // 非递归实现{while(r > l){int i = partation(a, l, r);if(k < i)r = i-1;if(k > i)l = i+1;}}

由于上述划分过程是将原数组中的数据进行交换,因此用上述选择算法操作数组后,a[k]中的元素就是第k小的元素。

4. 上述测试程序代码

参考资料:《算法:C语言实现》P201

背着背包的路上,看过许多人,

快速排序(3)的应用:选择

相关文章:

你感兴趣的文章:

标签云: