분 치 법 예

2818 단어 알고리즘
최대 원 과 차원 을 찾다
알고리즘 설명: 문 제 를 하위 문제 로 나 누 어 하나 또는 두 개의 요 소 를 비교 할 때 가장 큰 값 은 그 자체 이 고 두 개의 요소 일 때 가장 큰 값 은 비교적 큰 것 이 고 큰 값 은 작은 것 입 니 다.최소 상황 이 아니라면, 문 제 를 작은 문제 로 나 누 어 라.마지막 으로 앞의 최대 치 차 대 치 와 뒤의 최대 치 차 대 치 를 되 돌려 주 고 이 네 개의 수 를 비교 합 니 다. 만약 에 뒤의 최대 치가 최대 치 보다 크 면 최대 치 는 max 1 이 고 다시 큰 값 을 비교 하면 큰 값 은 큰 값 을 줍 니 다.이 문 제 는 두 번 의 최대 치 와 차 대 치 를 어떻게 비교 하 느 냐 가 관건 이다.원본 프로그램:
#include 
using namespace std;
int a[100];

/*        */
void Max12(int i,int j,int &max,int &mimax){
	int max1,mimax1;
	if(i==j){//     ,         
		max=mimax=a[i];
	}
	else if(i==j-1){//     ,         ,      
		if(a[i]max) {/ / 뒤에 최대 치가 최대 치보다 크 면 최대 치 를 변경 합 니 다.
mimax=max;
max=max1;
if(mimax1>mimax)
mimax=mimax1;
}
else if (max 1 > mimax) {/ / 뒤의 최대 치 는 차 보다 크 고 차 대 치 를 변경 합 니 다.
mimax=max1;
}
}
}
int main(){
int n,i;
int max,mimax;
cin>>n;
for(i=0;i>a[i];
max = a [0]; / / 최대 치 큰 값 으로 초기 화
mimax=a[0];
Max12(0,n-1,max,mimax);
cout<

빠 른 정렬
알고리즘 설명: 주어진 서열 을 큰 것 에서 작은 것 으로 정렬 하고 빠 른 정렬 을 쓰기 전에 구분 함 수 를 써 야 합 니 다.구분 함 수 는 첫 번 째 값 보다 큰 것 을 왼쪽 에 놓 고 작은 것 을 오른쪽 에 놓 을 수 있다.여기 감시 초 소 를 설치 하여 시퀀스 의 끝 값 을 무한소 로 부여 하여 i 경 계 를 넘 지 않도록 합 니 다.i. 첫 번 째 값 보다 작은 정 지 를 찾 을 때 까지 j 는 첫 번 째 값 보다 큰 정 지 를 찾 을 때 까지 앞으로 갑 니 다. 만약 에 i, j 가 교차 하지 않 으 면 두 요 소 를 교환 합 니 다. i, j 가 교차 할 때 까지.마지막 으로 j 의 값 과 첫 번 째 값 을 교환 하고 첫 번 째 값 은 순 서 를 정 했다.
원본 프로그램:
#include 
using namespace std;
int a[100];

/*        */
int Pa(int left,int right){
	int i=left;
	int j=right+1;
	int temp=a[j];//    right     ,          
	a[j]=0x80000000;
	do{
		do
			i++;
		while(a[i]>a[left]);//i        

		do
			j--;
		while(a[j]>n;
for(i=0;i>a[i];
}
a [n] = 0x 80000000; / / 마지막 은 무한대 로 감시초 소 로
QuickSort(0,n-1);
for(i=0;i

k 번 째 요소 찾기
알고리즘 설명: k 작은 요 소 를 찾 고 patition 구분 함 수 를 이용 하여 한 번 도 찾 지 않 으 면 j + 1 작은 것 을 찾 을 수 있 습 니 다. 이 점 을 이용 하여 K 작은 것 을 찾 을 때 까지 구분 함 수 를 계속 호출 합 니 다. 여기 서 주의해 야 할 것 은 j 와 k 크기 를 비교 하여 호출 순 서 를 줄 이 는 것 입 니 다. 예 를 들 어 절반 으로 찾 을 때 j 왼쪽, 시간, 오른쪽 을 찾 습 니 다.
원본 프로그램:
#include 
using namespace std;
int a[100];

/*        */
int Pa(int left,int right){
	int i=left;
	int j=right+1;
	int temp=a[j];
	a[j]=0x7fffffff;
	do{
		do
			i++;
		while(a[i]a[left]);
if (ik) / / j 가 크 면 K 가 작 으 면 왼쪽 에 있 을 거 예요.
j=Pa(left,j-1);
else if(j>n;
for(i=0;i>a[i];
}
cin>>x;
j = find (0, n - 1, x - 1); / x - 1 은 배열 아래 표 시 를 적응 하기 위해 서 입 니 다.
cout<

좋은 웹페이지 즐겨찾기