码迷,mamicode.com
首页 > 其他好文 > 详细

划分方法的应用

时间:2015-08-05 14:36:16      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:

划分对于分治的算法设计很重要,下面就专门说一个划分的算法设计,然后再举例子说一些具体的应用。

int Partition(int data[], int start, int end)
{
	if(data == NULL)
		return -1;
    int index = RandomInRange(start, end);
    int small = start - 1;
 
    swap(data[index], data[end]);
 
    for(index = start; index < end; index++)
    {
        if(data[index] < data[end])
        {
            ++small;
            if(small != index)
            {
                swap(data[small], data[index]);
            }//if
        }//if
    }//for
 
    ++small;
    swap(data[small], data[end]);
 
    return small;
}//Partition()

  下面看一下划分的应用。

快速排序中的划分

void QuickSort(int data[], int start, int end)
{
    if(start == end)
        return;
 
    int index = Partition(data, start, end);
 
    if(index > start)
        QuickSort(data, start, index - 1);
    if(index < end)
	QuickSort(data, index + 1, end);
}

  递归的程序一定要有递归出口。

查找第K大的数字

int findKth(int *data, int start, int end, int k)
{
    if(start >= end)
		return data[end];
		
	int pos = partition(data, start, end);
	if(pos + 1 == k)
		return data[pos];
	else if(pos + 1 > k)
		return findKth(data,start, pos -1, k);
	else
		return findKth(data, pos + 1, end, k);
}

int findKthLargest(int *nums, int numsSize, int k) 
{
    //转换成求第k小元素
   int m = numsSize - k +  1;

   int result = findKth(nums, 0, numsSize - 1, m);

   return result;
}

  

划分方法的应用

标签:

原文地址:http://www.cnblogs.com/stemon/p/4704539.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!