首页 > 编程语言 > 详细

查找序列中第K小的数与快速排序

时间:2016-12-22 11:35:34      阅读:151      评论:0      收藏:0      [点我收藏+]

#include <algorithm>
#include <iostream>

int Partition(int X[], int left, int right)
{
int pivot = X[left];
int L = left;
int R = right;
while(L < R)
{
while(X[L] <= pivot && L < right)
{
++L;
}
while(X[R] > pivot && R > left)
{
--R;
}
if (L < R)
{
std::swap(X[L], X[R]);
}
}
std::swap(X[left], X[R]);
return R;
}

void Procedure(int X[], int left, int right)
{
if (left < right)
{
int middle = Partition(X, left, right);
Procedure(X, left, middle-1);
Procedure(X, middle+1, right);
}
}

void QSort(int X[], int count)
{
Procedure(X, 0, count-1);
}

int ProcedureSelect(int X[], int left, int right, int k)
{
if (left == right)
{
return X[left];
}
else
{
int middle = Partition(X, left, right);
if (middle - left + 1 >= k)
{
return ProcedureSelect(X, left, middle, k);
}
else
{
return ProcedureSelect(X, middle+1, right, k - (middle - left +1));
}
}
}

int Select(int X[], int count, int k)
{
if (k < 1 || k > count)
{
std::cout << " ERROR" << std::endl;
return -1;
}
else
{
return ProcedureSelect(X, 0, count-1, k);
}

}

查找序列中第K小的数与快速排序

原文:http://www.cnblogs.com/fullnamefull/p/6210018.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!