?? searchmedian.cpp
字號:
// SearchMedian.cpp : 定義控制臺應用程序的入口點。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
// 快排中的劃分
int Partition (int L[], int low, int high)
{
int pivotkey = L[low];
while (low < high)
{
while (low<high && L[high]>=pivotkey)
{
high--;
}
if(low < high) L[low++]=L[high];
//L[low]=L[high];
while (low < high && L[low] <= pivotkey)
{
low++;
}
if(low < high) L[high--] = L[low];
//L[high] = L[low];
/*for (int i=low; i<=high; i++)
{
cout<<L[i] << " ";
}
cout << endl;*/
}
L[low] = pivotkey;
return low;
}
// 尋找第x大的數
int Searchxth(int A[], int low, int high, int xth)
{
if (xth+low > high) return -1;
int pivotLoc = Partition(A, low, high);
int ith = pivotLoc-low;
if (ith == xth)
{
return A[pivotLoc];
}
else if (ith < xth)
{
return Searchxth(A, pivotLoc+1, high, xth-ith-1);
}
else // ith > xth
{
return Searchxth(A, low, pivotLoc-1, xth);
}
}
// 尋找無序數組的中位數
void TestSearchMedian()
{
int A[] = {7,6, 12, 15, 9, 19,3, 22,51, 30,1,14};
int N = sizeof(A)/sizeof(int);
int V = 5;
int low = 0;
int high = N-1;
int mid = (low+high)/2;
cout<<Searchxth(A, low, high, mid);
}
int _tmain(int argc, _TCHAR* argv[])
{
TestSearchMedian();
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -